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

时间:2014-11-13 23:32:06

标签: ios objective-c xcode icarousel

我使用iCarousel插件进行自定义转换,并尝试制作特定的淡入淡出效果。 我希望当前项目之前的所有项目都褪色但当前项目和所有项目都没有褪色。有没有办法用淡入淡出选项做到这一点?我试过但没有成功。 所以我试着在旋转木马的视图上制作动画。 这就是我在这里得到的:

- (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel
{
    UIView *viewToFadeOut = [carousel itemViewAtIndex:self.carousel.currentItemIndex-1];
    [UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{
        viewToFadeOut.alpha = 0.6f;
    } completion:^(BOOL finished) {

    }];

    UIView *viewToFadeIn = [carousel itemViewAtIndex:self.carousel.currentItemIndex];
    [UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{
        viewToFadeIn.alpha = 1.0f;
    } completion:^(BOOL finished) {

    }];
}

但它并不能完全按照我想要的方式工作,因为fadeIn动画会在当前项目更改后启动,因此动画启动时间太晚。

也许有办法实现像

这样的方法
- (void)carouselCurrentItemIndexWillChange:(iCarousel *)carousel;

并以延迟启动fadeOut动画?

2 个答案:

答案 0 :(得分:3)

如果我已经理解正确,您只需将其添加到您的代表:

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value
{
    if (option == iCarouselOptionFadeMin)
    {
        return 0.0;
    }
    else if (option == iCarouselOptionFadeMinAlpha)
    {
        return 0.6;
    }
    return value;
}

答案 1 :(得分:3)

使用swift 3(如果您在使用Swift 3时无法使用iCarousel,请查看https://medium.com/@arb1nsnmgl/icarousel-walkthrough-swift-3-0-887554155242#.bgs3r7n7b

func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat {
    if (option == .fadeMin)
    {
        return 0;
    } else if (option == .fadeMinAlpha)
    {
        return 0.3;
    } else if (option == .fadeMax)
    {
        return 0.3;
    }
    return value;
}