Почему CALayer, [CATransaction commit], не реагирует мгновенно в scrollViewDidScroll: - PullRequest
0 голосов
/ 06 ноября 2018

Вставлено CALayer, а затем [CATransaction commit] в scrollViewDidScroll:

почему не реагирует мгновенно в scrollViewDidScroll:?

для быстрого перетаскивания, есть пустая вспышка.

q

медленная обработка в порядке

img normal

Вот код:

- (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?

...