作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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/
我有一个 UIScrollView 的子类,它应该在顶部/底部淡出。(从不透明到透明颜色,就像 Notes.app 在 DetailView 底部所做的那样。) 所以我添加了一个 UIGradient
我是一名优秀的程序员,十分优秀!