Я пытаюсь нарисовать тени в прямоугольнике. Само теневое изображение составляет около 1px * 26px.
Вот два способа рисования изображения в представлении, о которых я подумал:
//These methods are called in drawRect:
/* Method 1 */
[self.upperShadow drawInRect:rectHigh]; //upperShadow is UIImage
[self.lowerShadow drawInRect:rectLow];
/* Method 2 */
CALayer *shadowTop = [CALayer layer];
shadowTop.frame = rectHigh;
shadowTop.contents = (__bridge id)topShadow; //topShadow is CGImage
[self.layer addSublayer:shadowTop];
CALayer *shadowLow = [CALayer layer];
shadowLow.frame = rectLow;
shadowLow.contents = (__bridge id)lowShadow;
[self.layer addSublayer:shadowLow];
/* Method 3 */
UIImageView *tShadow = [[UIImageView alloc] initWithFrame:rectHigh];
UIImageView *bShadow = [[UIImageView alloc] initWithFrame:rectLow];
tShadow.image = self.upperShadow;
bShadow.image = self.lowerShadow;
tShadow.contentMode = UIViewContentModeScaleToFill;
bShadow.contentMode = UIViewContentModeScaleToFill;
[self addSubview:tShadow];
[self addSubview:bShadow];
Мне любопытно, что из этого лучше, когда речь идет о производительности в рисовании и анимации. Из моего бенчмаркинга кажется, что слои рисовать быстрее. Вот некоторые сравнительные характеристики:
drawInRect: took 0.00054 secs
CALayers took 0.00006 secs
UIImageView took 0.00017 secs
Вид, содержащий эти тени, будет иметь вид над ним, который будет анимированным (сам вид - нет). Следует избегать всего, что может ухудшить производительность анимации. Есть какие-нибудь мысли между тремя методами?