我有一个以特定方式定位的UIImageView。当用户轻击图像时,修改帧以放大图像。当用户第二次点击图像时,它应该恢复到原始位置。我认为我这样做的方式如下:
在viewDidLoad()中,我保存了UIImageView框架。当用户点击图像时,我修改了UImageView框架以放大图像。当用户再次点击图像时,我将UIImageView帧设置为我之前保存的原始帧。
所以,在viewDidLoad()
中<meta http-equiv="refresh"
content="0;url=http://www.highlandlakes.com/index.html
frame1=menu.htm&frame2=main.htm" />
然后,当用户点击图像时,它会被放大并填充父视图。
originalThumbnailImageFrame = imageThumbnail.layer.frame
当用户再次点击图像时,它应该恢复到原始帧。
imageThumbnail.frame = viewHeader.layer.bounds
然而,由于某种原因,它没有。它位于原始位置的右侧。我在这里缺少什么?
我甚至尝试了以下内容,只是为了踢:
imageThumbnail.frame = originalThumbnailImageFrame
结果是,当用户点击图像时,它会向右移动,而我希望它只是保留在原位。 混淆
答案 0 :(得分:1)
您正在获得图层坐标与视图坐标。我认为应该是:
originalThumbnailImageFrame = imageThumbnail.frame
答案 1 :(得分:0)
在上面的一条评论中,您已经说过要应用变换(如果您正在应用带动画或不带动画的变换,则无关紧要)。如果您的imageThumbnail
已应用转换,则frame
属性行为未定义(包括读写),以下是docs所说的内容:
如果transform属性包含非标识变换,则frame属性的值是未定义的,不应修改。在这种情况下,您可以使用center属性重新定位视图,并使用bounds属性调整大小。
答案 2 :(得分:0)
获取实际帧,而不是图层帧。因此imageThumbnail.layer.frame
应该是imageThumbnail.frame
在viewDidLoad
尝试致电
view.layoutIfNeeded()
originalThumbnailImageFrame = imageThumbnail.frame
<强>说明:强>
在viewDidLoad
中,视图通常尚未正确布局,layoutIfNeeded
强制执行此操作。这意味着您在originalThumbnailImageFrame
中存储的帧不是视图实际显示的帧。
或者在originalThumbnailImageFrame = imageThumbnail.frame
功能中执行viewWillAppear
。布局已经完成
答案 3 :(得分:0)
这里的解决方案是在viewDidLayoutSubviews()
中存储对原始UIImageView框架的引用,以便存储正确的框架。
override func viewDidLayoutSubviews() {
originalThumbnailImageFrame = imageThumbnail.frame
}
这就是诀窍!