2012-04-19 2 views
2

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]; 

+0

私が知っている限り、 'layoutSubviews' *は' UIScrollView'をスクロールするときに呼び出されます。 'UIScrollView'の背後にあるグラデーションのみを含む別の' UIView'を配置し、 'UIScrollView'を透明にします。 –

+0

問題は、コンテンツをフェードアウトし、グラデーションの背景を追加しないため、スクロールビュー自体をマスクする必要があるということです。 – Thyraz

+0

私が言ったように、グラデーションビューをフォアグラウンドに入れますが、タッチが下のスクロールビューに達するようにユーザーのやりとりを無効にします。 –

答えて

6

この記事http://cocoawithlove.com/2009/08/adding-shadow-effects-to-uitableview.htmlあなたはこのようなあなたのフレームの変更を囲むように持っているを参照して... layoutSubviewsは、アニメーションから呼び出されるべきではない、と私はすぐそこに新しいフレームを設定しましたアニメーションなしで起こるはずです。これがうまくいけばよろしいですか?

+0

ありがとうございました。 ;) – Thyraz

関連する問題