我们如何改变 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 中的淡入淡出颜色?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iCarousel 淡化 currentItem 之前的所有项目?