2

フェードインとフェードアウトの画像に青色を適用したいとします。どうすればこれを達成できますか?

4

1 に答える 1

4

フェードインとフェードアウトはデリゲート メソッドによって制御されます。

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value;

このメソッドは、標準のカルーセル タイプのパラメーターをカスタマイズするために使用されます。このメソッドを実装することで、次のようなオプションを微調整できます。

iCarouselOptionFadeMin
iCarouselOptionFadeMax
iCarouselOptionFadeRange

これら 3 つのオプションは、現在中央にあるアイテムからのオフセットに基づいて、カルーセル アイテム ビューのフェードアウトを制御します。FadeMin は、アイテム ビューがフェードし始める前に到達できる最小の負のオフセットです。FadeMax は、フェードが始まる前にビューが到達できる正の最大オフセットです。FadeRange はフェードアウトが発生する距離で、アイテム幅の倍数で測定されます (デフォルトは 1.0)。

たとえば、0.5f から 2.5f にフェードアウトします。

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value {
    switch (option) {
        case iCarouselOptionFadeMax:
            return 0.5f;
            break;
        case iCarouselOptionFadeMin:
            return -0.5f;
            break;
        case iCarouselOptionFadeRange:
            return 2.5f;
            break;

        default:
            return value;
            break;
    }
}

ここで、青色をフェードインおよびフェードアウト画像に適用するには、iCarousel をサブクラス化できます。次の例では、コサイン関数を使用して、画像がフェードアウトする (アルファが 0.0f に近づく) と、青色のオーバーレイがフェードインする (アルファが 1.0f に近づく) と想定しています。

#import "iCarousel.h"

// Done to suppress compiler warning to super
@interface iCarousel (BlueOverlay)

- (UIView *)containView:(UIView *)view;
- (void)transformItemView:(UIView *)view atIndex:(NSInteger)index;
- (CGFloat)alphaForItemWithOffset:(CGFloat)offset;

@end

@interface BlueCarousel : iCarousel

@end

@implementation BlueCarousel

- (UIView *)containView:(UIView *)view
{    
    //get container frame
    UIView *containerView = [super containView:view];
    CGRect frame = containerView.frame;

    //create the blue overlay layer
    UIView *overlayView = [[UIView alloc] initWithFrame:frame];
    overlayView.backgroundColor = [UIColor blueColor];
    overlayView.alpha = 0.0f;
    [containerView addSubview:overlayView];

    return containerView;
}

- (void)transformItemView:(UIView *)view atIndex:(NSInteger)index
{
    [super transformItemView:view atIndex:index];

    //calculate offset
    CGFloat offset = [self offsetForItemAtIndex:index];

    //update blue overlay alpha e.g. using cosine function
    CGFloat alpha = cosf(M_PI_2*[self alphaForItemWithOffset:offset]);
    [(UIView*)[view.superview.subviews lastObject] setAlpha:alpha];
}

@end 
于 2013-02-27T01:19:33.843 に答える