[英]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.