Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使UIImage在滚动时淡入淡出?_Ios_Swift_Uiscrollview_Uiimageview_Uiscrollviewdelegate - Fatal编程技术网

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

Ios 如何使UIImage在滚动时淡入淡出?,ios,swift,uiscrollview,uiimageview,uiscrollviewdelegate,Ios,Swift,Uiscrollview,Uiimageview,Uiscrollviewdelegate,我有一个弹性头,我做了以下教程。不管怎么说,它工作得很好,但我很难让它上面的UIView随着视图的拉伸而淡出,随着视图恢复正常而恢复到原始alpha。我能想到的最好的办法是: override func scrollViewDidScroll(scrollView: UIScrollView) { updateHeaderView() var offset = scrollView.contentOffset.y

我有一个弹性头,我做了以下教程。不管怎么说,它工作得很好,但我很难让它上面的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
            }
        }

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

将两个UIImageView放置在彼此的顶部(在本例中,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”整数对应于数组中的索引。有一行代码检查scrollview是否不能意外地“太右”,即试图在数组边界之外找到索引

然后,我从一个名为events的数组中提取数据,并检查结果字典中是否存在图像(但可以将其用于图像的直接数组),更新两个UIImageView,然后根据滚动的内容偏移量淡入淡出顶部的一个(bgB)


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

self.view.alpha=…@NorthBlast已经在else条件下这样做了,但转换并不平滑:(使用UIView动画.)。。
     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;