UIImageView无法恢复原始帧

时间:2016-01-28 19:17:43

标签: ios swift

我有一个以特定方式定位的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

结果是,当用户点击图像时,它会向右移动,而我希望它只是保留在原位。 混淆

4 个答案:

答案 0 :(得分:1)

您正在获得图层坐标与视图坐标。我认为应该是:

originalThumbnailImageFrame = imageThumbnail.frame

答案 1 :(得分:0)

在上面的一条评论中,您已经说过要应用变换(如果您正在应用带动画或不带动画的变换,则无关紧要)。如果您的imageThumbnail已应用转换,则frame属性行为未定义(包括读写),以下是docs所说的内容:

  

如果transform属性包含非标识变换,则frame属性的值是未定义的,不应修改。在这种情况下,您可以使用center属性重新定位视图,并使用bounds属性调整大小。

答案 2 :(得分:0)

  1. 获取实际帧,而不是图层帧。因此imageThumbnail.layer.frame应该是imageThumbnail.frame

  2. viewDidLoad尝试致电

  3. view.layoutIfNeeded()
    originalThumbnailImageFrame = imageThumbnail.frame
    

    <强>说明:viewDidLoad中,视图通常尚未正确布局,layoutIfNeeded强制执行此操作。这意味着您在originalThumbnailImageFrame中存储的帧不是视图实际显示的帧。

    或者originalThumbnailImageFrame = imageThumbnail.frame功能中执行viewWillAppear。布局已经完成

答案 3 :(得分:0)

这里的解决方案是在viewDidLayoutSubviews()中存储对原始UIImageView框架的引用,以便存储正确的框架。

  override func viewDidLayoutSubviews() {
        originalThumbnailImageFrame = imageThumbnail.frame
    }

这就是诀窍!