我正在尝试iOS SDK,我有以下UIView
结构:
UIView
UIImageView
- 仅背景图片UIImageView
(带有CALayer
面具)UIScrollView
Label
非常简单的结构,UIScrollView
是透明层,第二个UIImageView
有一个掩码。我想要做的是CALayer
掩码会根据滚动视图中内容的位置移动它的位置。如果用户滚动,则应更新蒙版的位置。我已经使用UIScrollView
的委托解决了这个问题:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y = -contentOffset.y;
self.overlayImageView.viewlayer.mask.position = contentOffset;
}
掩码在viewDidLoad
中创建,在视图控制器的生命周期中不会更改。
问题是掩码位置更新太慢了。这样看起来掩码跟随滚动视图的内容,而不是滚动它。正确调用scrollViewDidScroll
委托方法。
为了更好地理解这个问题,我附上了我在iOS模拟器中制作的视频。 http://www.youtube.com/watch?v=w3xRl3LTngY
所以问题是:
有没有办法让面具更新更快,或者这是iOS的限制?
答案 0 :(得分:16)
对某些属性(如位置尝试禁用CALayer)隐式动画CALayer:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y = -contentOffset.y;
self.overlayImageView.viewlayer.mask.position = contentOffset;
[CATransaction commit];
}