2

假设,我想将蓝色应用于淡入淡出图像,我该如何实现?

4

1 回答 1

4

淡入淡出由委托方法控制:

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

该方法用于自定义标准轮播类型的参数。通过实施此方法,您可以调整选项,例如:

iCarouselOptionFadeMin
iCarouselOptionFadeMax
iCarouselOptionFadeRange

这三个选项控制轮播项目视图的淡出,基于它们与当前居中项目的偏移量。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 子类化。下面的示例假设随着图像淡出(alpha 接近 0.0f),蓝色叠加层使用余弦函数淡入(alpha 接近 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 回答