UIScrollViewのサブクラスが上/下にフェードアウトする必要があります。 (。不透明からclearColorに、Notes.appはDetailViewの一番下にありませんように)UIGradientLayerをlayer.maskとして使用してスクロールビューの下端/上端をフェードアウトする - >マスクの再配置が遅れている
は、だから私は、私が最初にスクロールするまで正常に動作するように見えたscrollview.layer.maskとしてUIGradientLayerを追加しました:
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;
しかし、私はスクロールしたときに、代わりにきれいにコンテンツをフェードアウトするために、画面の位置に貼り付けるの内容とスクロールマスク。
私は一種の再配置によること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;
}
をしかし、私はスクロールしたときに、今のマスクの動きは一種の遅れています。 マスクのフレームに遅延が設定され、アニメーションが設定されているようです。
マスクのスクロールと動きはスムーズではありませんので、ハードウェアが遅すぎると問題ではないと思います。
しかし、どのようにすることができますか?このことによって
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// Set the frame
[CATransaction commit];
:
私が知っている限り、 'layoutSubviews' *は' UIScrollView'をスクロールするときに呼び出されます。 'UIScrollView'の背後にあるグラデーションのみを含む別の' UIView'を配置し、 'UIScrollView'を透明にします。 –
問題は、コンテンツをフェードアウトし、グラデーションの背景を追加しないため、スクロールビュー自体をマスクする必要があるということです。 – Thyraz
私が言ったように、グラデーションビューをフォアグラウンドに入れますが、タッチが下のスクロールビューに達するようにユーザーのやりとりを無効にします。 –