Вставлено CALayer
, а затем [CATransaction commit]
в scrollViewDidScroll:
почему не реагирует мгновенно в scrollViewDidScroll:
?
для быстрого перетаскивания, есть пустая вспышка.
![q](https://i.stack.imgur.com/Xd8B8.gif)
медленная обработка в порядке
![img normal](https://i.stack.imgur.com/ryiSb.gif)
Вот код:
- (void)viewDidLoad {
self.backLayer = [[CALayer alloc] init];
self.backLayer.frame = CGRectMake(0, 0, KScreenWidth, 0);
[self.view.layer addSublayer: self.backLayer];
self.backLayer.backgroundColor = navigationBarBuleColor.CGColor;
self.backLayer.actions = @{@"position":[NSNull null]};
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat y = scrollView.contentOffset.y;
if (y>0) {
self.backLayer.opacity = 0;
}
else{
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
CGRect frame = self.backLayer.frame;
frame.size.height = (fabs(y));
self.backLayer.frame = frame;
self.backLayer.opacity = 1;
[CATransaction commit];
}
}
Я проверил Немедленно обновите подслои CALayer .
И я использую UIView, все в порядке.
Вот код:
- (void)viewDidLoad {
self.assistView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 0)];
self.assistView.backgroundColor = navigationBarBuleColor;
[self.view addSubview:self.assistView];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat y = scrollView.contentOffset.y;
if (y>0) {
self.assistView.alpha = 0;
} else{
CGRect frame = self.assistView.frame;
frame.size.height = (fabs(y));
self.assistView.frame = frame;
self.assistView.alpha = 1;
[self.view setNeedsLayout];
}
}
Какой это метод CALayer, равный setNeedsLayout
?
Подробнее: я пытаюсь решить проблему со слоем Как установить разные цвета фона пустого пространства UITableView?