Thy*_*raz 2 iphone objective-c ios
我有一个UIScrollView的子类,应该在顶部/底部淡出.(从opaque到clearColor,就像DetailView底部的Notes.app一样.)
所以我添加了一个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;
Run Code Online (Sandbox Code Playgroud)
但是当我滚动时,屏幕会滚动内容而不是粘在屏幕位置上,以便很好地淡出内容.
我通过在scrollviews 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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我滚动时,现在面具的移动有点延迟了.看起来掩码的帧设置有延迟和动画.
两者,面具的滚动和移动都是平滑的,所以我不认为这是一个太慢的硬件问题.
但那怎么可能呢?不应该从动画中调用layoutSubviews,我立即在那里设置新框架......
小智 6
参考这篇文章http://cocoawithlove.com/2009/08/adding-shadow-effects-to-uitableview.html你必须像这样围绕你的框架更改:
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// Set the frame
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
有了它,它应该没有任何动画.希望这工作:)