【发布时间】:2018-03-28 11:00:24
【问题描述】:
我在故事板上有一个 UIImageView,它具有固定的高度和前导、顶部和尾随约束。我以编程方式修改它的 alpha 和它的顶部常量,以实现视差并随着不相关的 scrollView 向上平移而淡出。但是,每当我将此 imageView 的图像设置为新值时,其顶部约束和 alpha 都会重置为它们的情节提要值。
代码 sn-ps 如下:
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var imageViewTop: NSLayoutConstraint!
extension ContentTableController: UIScrollViewDelegate {
/* Creating parallax by modifying the top constant,
and also fading out image as scrollView scrolls up.
Note the imageView is NOT in the scrollView in question. */
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offsetY = scrollView.contentOffset.y
let height = featuredPoster.frame.size.height
let percentScrolled: CGFloat = max(1 - offsetY / height, 0)
let parallaxFraction: CGFloat = 0.3
imageView.alpha = percentScrolled
imageViewTop.constant = -offsetY * parallaxFraction
}
...
}
...
// Called elsewhere
func setsImage() {
// setting its image resets the view's alpha and the value of its top constant
imageView.image = nil // setting to nil, but could be any value
}
【问题讨论】:
-
您必须有其他代码在工作...我刚刚对您的代码进行了快速测试,通过点击按钮调用
setsImage(),imageView保持在原处并保持其.alpha。尝试创建一个新的视图控制器,添加并设置一个滚动视图和图像视图...连接你的代码,你应该会发现这不是问题。然后,尝试找出你的完整代码正在做什么可能导致“重置”。 -
有趣.. 不错的收获。表面上我没有在其他任何地方做任何相关的代码。更改图像的调用的来源来自 uicollectionviewdelegate。我现在想知道我是否可能不会在主队列中设置此图像,以及这是否会导致这种情况。
-
貌似不是线程安全问题。 @DonMag,您正在使用情节提要中的任何特定设置吗?
-
不,没什么特别的。当您的集合视图中发生调用
setsImage()的任何事情时,您是否检查过您的scrollViewDidScroll()函数是否被.contentOffset.y值0触发? -
你叫它。我在 scrollViewDidScroll 上放了一个断点......我有其他使用这个委托的滚动视图。一个是自动画,由于我没有验证哪个 scrollView 正在调用该方法,因此它具有重置值的外观。 setsImage() 也与此动画相关联。操作员错误再次发生>.
标签: ios swift uiimageview uistoryboard nslayoutconstraint