UIScrollView具有fadeIn / fadeOut效果

时间:2013-09-15 17:23:38

标签: iphone ios objective-c uiscrollview fadein

我使用页面控件滚动视图,当我滚动到下一页或从下一页滚动时,我想创建我的scrollview fadeIn / fadeOut的子视图。我发现我可以使用contentOffset来实现这个效果,但我无法做到。 事实上,我是新手,我希望如果有任何教程可以提供帮助。谢谢。

4 个答案:

答案 0 :(得分:4)

假设您在根据UIPageControl索引的self.viewControllers中保存了一组视图控制器:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{

    CGFloat diffFromCenter = ABS(scrollView.contentOffset.x - (self.pageControl.currentPage)*self.view.frame.size.width);
    CGFloat currentPageAlpha = 1.0 - diffFromCenter/self.view.frame.size.width;
    CGFloat sidePagesAlpha = diffFromCenter/self.view.frame.size.width;

    //NSLog(@"%f",currentPageAlpha);

    [[[self.viewControllers objectAtIndex:self.pageControl.currentPage] view] setAlpha:currentPageAlpha];

    if (self.pageControl.currentPage > 0)
        [[[self.viewControllers objectAtIndex:self.pageControl.currentPage-1] view] setAlpha:sidePagesAlpha];

    if (self.pageControl.currentPage < [self.viewControllers count]-1)
        [[[self.viewControllers objectAtIndex:self.pageControl.currentPage+1] view] setAlpha:sidePagesAlpha];

}

答案 1 :(得分:0)

您可以查看有关视图动画的本教程:

Uiview-tutorial-for-ios-how-to-use-uiview-animation

为了达到你想要的效果,你可以使用这样的东西:

ScrollView委托方法检测滚动(如果您的唯一分页)

   -(void)scrollViewDidScroll:(UIScrollView *)scrollView
   {
        UIView* subView = [scrollView.subviews lastObject]; //Or however you access your subview

        [UIView animateWithDuration:1.0f animations:^{
            subView.alpha = 0.0f;
        } completion:^(BOOL finished){
            [UIView animateWithDuration:1.0f animations:^{
               subView.alpha = 1.0f; 
            }]; 
        }];
   }

这将使您的子视图在2.0秒的范围内平滑淡出。你应该阅读一下这个动画块,但它们可能有点棘手。例如,我在第一个动画块完成后嵌套了第二个动画块,因为它们中的实际代码是立即处理的,动画只是在View的一侧进行。

希望这有帮助!

答案 2 :(得分:0)

你可以将它淡化为零,在没有动画的情况下更改contentOffset,然后用1.0将其淡化为alpha:

- (IBAction)didChangePageView:(id)sender
{
    [UIView animateWithDuration:0.25
                     animations:^{
                         self.scrollView.alpha = 0.0;
                     }
                     completion:^(BOOL finished) {
                         [self.scrollView setContentOffset:CGPointMake(0, self.scrollView.frame.size.height * self.pageViewControl.currentPage) animated:NO];

                         [UIView animateWithDuration:0.25 animations:^{
                             self.scrollView.alpha = 1.0;
                         }];
                     }];
}

答案 3 :(得分:0)

使用Swift 2.0,假设您在myViewsArray中保存了一个子视图数组:

func scrollViewDidScroll(scrollView: UIScrollView) {
    //Fade in/out effect while scrolling
    for (index,subView) in myViewsArray.enumerate() {
        label.alpha = 1 - abs(abs(scrollView.contentOffset.x) - subView.frame.width * CGFloat(index)) / subView.frame.width
    }
}