Как добавить градиент в скроллвью? - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь добавить несколько градиентов в различные UIScrollView и UITableView.Наиболее распространенный пример того, как этого добиться, с которым я сталкивался, - из удивительного блога Мэтта Галагера, где он опубликовал пример использования градиентов:

http://cocoawithlove.com/2009/08/adding-shadow-effects-to-uitableview.html

Хотя мой вопросКакие преимущества вы получаете, вставляя градиент в метод layoutSubviews по сравнению с настройкой градиента в методе viewDidLoad?Я понимаю, что при переходе по маршруту viewDidLoad вам придется обновлять представление вручную при изменении ориентации, но с точки зрения производительности может показаться, что этот метод будет вызываться только один раз при загрузке представления, а затем снова при изменении ориентации.В отличие от этого, метод layoutSubviews вызывается каждый раз, когда изменяется представление, что в случае с scrollview / tableview очень много!

//
// Construct the origin shadow if needed
//
if (!originShadow)
{
    originShadow = [self shadowAsInverse:NO];
    [self.layer insertSublayer:originShadow atIndex:0];
}
else if (![[self.layer.sublayers objectAtIndex:0] isEqual:originShadow])
{
    [self.layer insertSublayer:originShadow atIndex:0];
}

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

//
// Stretch and place the origin shadow
//
CGRect originShadowFrame = originShadow.frame;
originShadowFrame.size.width = self.frame.size.width;
originShadowFrame.origin.y = self.contentOffset.y;
originShadow.frame = originShadowFrame;

[CATransaction commit];

Кажется, он также изменяет размер фрейма при каждом вызове метода?Не лучше ли инициализировать и задать размер градиента в методе viewDidLoad, а затем выполнить любое изменение размера, когда / если ориентация изменится?

Уверен, что я что-то здесь упустил, поэтому любые пояснения будут оценены.* Thx

1 Ответ

0 голосов
/ 20 апреля 2011

Я бы не стал создавать градиент в layoutSubviews.Подвиды компоновки могут вызываться чаще, чем это оптимально для этого типа рисования.Делая что-то интенсивное использование CPU в layoutSubviews, например создание градиента, вы можете негативно повлиять на производительность.

Вместо этого я бы поместил ваш градиент в подпредставление, а затем добавил ваше подпредставление в представление прокрутки (viewDidLoad, initили awakeFromNib хорош для этого), и пусть он обрабатывает его рисование автоматически.Затем в layoutSubviews настройте компоновку своего подпредставления и дайте ему справиться, выясняя, какие части представления необходимо перерисовать для обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...