我们如何改变 iCarousel 中的淡入淡出颜色?

Posted

技术标签:

【中文标题】我们如何改变 iCarousel 中的淡入淡出颜色?【英文标题】:How can we change the fade color in iCarousel? 【发布时间】:2013-01-25 06:46:27 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

- (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 

【讨论】:

以上是关于我们如何改变 iCarousel 中的淡入淡出颜色?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery通过淡入淡出改变背景颜色并延迟返回原始颜色

如何使用 iCarousel 淡化 currentItem 之前的所有项目?

如何淡入和淡出svg的颜色

Android - 如何使用交叉淡入淡出动画更改状态栏颜色[重复]

如何使用淡入淡出改变图像

如何让悬停颜色淡入淡出? - jQuery,HTML