繁体   English   中英

如何在滚动时使UIImage淡入和淡出?

[英]How do I make a UIImage fade in and fade out as I scroll?

我在遵循本教程http://blog.matthewcheok.com/design-teardown-stretchy-headers/之后制作了一个可伸缩的标头。 无论如何,它都可以正常工作,但是我无法使UIView在其顶部逐渐消失,因为视图会拉伸,并且在视图恢复正常时会返回原始alpha。 我能想到的最好的办法是:

override func 

    scrollViewDidScroll(scrollView: UIScrollView) {
            updateHeaderView()
            var offset = scrollView.contentOffset.y
            if offset < -170 {

                headerBlurImageView?.alpha = max(0.0, offset - 95/35)
            } else {
            self.headerBlurImageView?.alpha = 1
            }
        }

但这几乎行不通。 Alpha之间没有平滑的过渡,当视图返回正常状态时,Alpha不会返回。 有什么建议或提示吗?

更新:我设法做到了与我想要的完全相反的方法:p这是代码:

override func scrollViewDidScroll(scrollView: UIScrollView) {
        updateHeaderView()
        var height: CGFloat
        var position: CGFloat
        var percent: CGFloat

        height = scrollView.bounds.size.height/2
        position = max(-scrollView.contentOffset.y, 0.0)
        percent = min(position / height, 1.0)
        self.headerBlurImageView.alpha = percent
    }

看一下UIScrollViewDelegate协议。 有许多与开始和结束拖动以及减速有关的消息。 您应该能够将视图控制器设置为滚动视图的委托,并实现其中一些方法。 我将创建一个UIView动画,该动画在滚动开始时将标题的Alpha向下动画,以及另一个UIView动画,一旦滚动结束(或可能一旦减速结束),则将其动画化为不透明。

将两个UIImageViews互相布局(在此示例中,bg在bgB下),然后将UIScrollview布局在最顶层。 在scrollviewDidScroll方法中,放置以下代码:

     float off = cv.contentOffset.x;
     float floatedIndex = off/cv.frame.size.width;
     int left = floatedIndex;
     int right = ceil(floatedIndex);
     if (right>events.count-1){ right=events.count-1; }
     float alpha = floatedIndex-left;

     UIImage * leftImage = nil;
     UIImage * rightImage = nil;
     NSDictionary * ld = events[left];
     NSDictionary * rd = events[right];
     NSObject * o = ld[@"artwork"];
     if ([o isKindOfClass:[UIImage class]]){
     leftImage = ld[@"artwork"];
     }
     o = rd[@"artwork"];
     if ([o isKindOfClass:[UIImage class]]){
     rightImage = rd[@"artwork"];
     }

     bg.image = leftImage;
     bgB.image = rightImage;
     bgB.alpha = alpha;

'left'和'right'整数对应于数组中的索引。 有一行检查滚动视图不会意外地“太右”,即试图找到数组边界之外的索引。

然后,我从称为事件的数组中提取数据,并检查结果字典中是否存在图像(但是您可以将其用于图像的直接排列),同时更新两个UIImageviews,然后将其顶部褪色( bgB)进出,具体取决于滚动条的内容偏移量。

“动画”与用户交互相关,这很好,但是有时最好将动画块与其他scrollview委托方法一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM