フェードインとフェードアウトの画像に青色を適用したいとします。どうすればこれを達成できますか?
1794 次
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 に答える