假设,我想将蓝色应用于淡入淡出图像,我该如何实现?
问问题
1794 次
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 回答