gpt4 book ai didi

iphone - 使用 UIGradientLayer 作为 layer.mask 淡出 ScrollView 的底部/顶部 --> 掩码的重新定位滞后

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:19:51 24 4
gpt4 key购买 nike

我有一个 UIScrollView 的子类,它应该在顶部/底部淡出。(从不透明到透明颜色,就像 Notes.app 在 DetailView 底部所做的那样。)

所以我添加了一个 UIGradientLayer 作为 scrollview.layer.mask 在我第一次滚动之前它似乎工作正常:

    CAGradientLayer *mask = [CAGradientLayer layer];
mask.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.1],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:1.0],
nil];

mask.colors = [NSArray arrayWithObjects:
(__bridge id)[UIColor clearColor].CGColor,
(__bridge id)[UIColor whiteColor].CGColor,
(__bridge id)[UIColor whiteColor].CGColor,
(__bridge id)[UIColor clearColor].CGColor,
nil];

mask.frame = self.scrollview.bounds;
// vertical direction
mask.startPoint = CGPointMake(0, 0);
mask.endPoint = CGPointMake(0, 1);

self.scrollview.layer.mask = mask;

但是当我滚动时, mask 会随着内容一起滚动,而不是停留在屏幕位置以很好地淡出内容。

我通过在 ScrollView layoutSubviews 中重新定位掩码来解决这个问题:

-(void)layoutSubviews {
[super layoutSubviews];

CGRect layerMaskFrame = self.layer.mask.frame;
layerMaskFrame.origin = [self convertPoint:self.bounds.origin toView:self];

self.layer.mask.frame = layerMaskFrame;
}

但现在当我滚动时, mask 的移动有点延迟。看起来面具的框架设置了延迟和动画。

mask 的滚动和移动都很流畅,所以我认为这不是硬件太慢的问题。

但这怎么可能呢?不应从动画中调用 layoutSubviews,我会立即在那里设置新框架...

最佳答案

引用这篇文章http://cocoawithlove.com/2009/08/adding-shadow-effects-to-uitableview.html你必须像这样包围你的框架变化:

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

// Set the frame

[CATransaction commit];

有了这个,它应该在没有任何动画的情况下发生。希望这有效:)

关于iphone - 使用 UIGradientLayer 作为 layer.mask 淡出 ScrollView 的底部/顶部 --> 掩码的重新定位滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com