2016-05-16 62 views
1

我试图复制我目前使用的应用程序的动画。在应用程序中,图片拍摄后,如果用户点击UIImageView,它会平滑地扩展到一定的大小,并在点击UIImageView时,它会平滑地崩溃到原始大小。如何使用AutoLayout在swift中顺利地动画UIImageView?

下面是一个例子:

enter image description here

然而,当我试图复制它,动画是 “wooply” 为在这里看到:

enter image description here

这里是我的代码示例:

if recogizer.view == thumbnailImageView && isThumbnailExpanded == false 
{ 
    UIView.animateWithDuration(1, animations: {() -> Void in 

    self.thumbnailImageView!.frame.size.width = self.view.frame.size.width * 0.7 
    self.thumbnailImageView!.frame.size.height = self.view.frame.size.height * 0.6 
    self.thumbnailImageView!.frame.origin.x = (self.view.frame.width/2) - (self.thumbnailImageView!.frame.size.width/2) 
    self.thumbnailImageView!.frame.origin.y = -100 

    }) 

    isThumbnailExpanded = true 
    } 
else if recogizer.view == thumbnailImageView && isThumbnailExpanded == true 
{ 
    UIView.animateWithDuration(1, animations: {() -> Void in 

    self.thumbnailImageView!.frame.size.width = self.thumbnailImageViewWidth 
    self.thumbnailImageView!.frame.size.height = self.thumbnailImageViewHeight 
    self.thumbnailImageView!.frame.origin.x = self.thumbnailImageViewXPosition 
    self.thumbnailImageView!.frame.origin.y = self.thumbnailImageViewYPosition 

    }) 

    isThumbnailExpanded = false 
} 

H ere的我的自动布局约束:

enter image description here 如何使我的UIImageView更加平滑地动画,如上所示?

感谢

+0

检查自动布局约束或发布它的快照 –

+0

从大小检查器发布大小类属性快照。 –

回答

2

,因为你正在改变图像的长宽比动画出现颤抖,你应该保持宽高比以免压扁的图像。


此外,你应该不是一个动画自动布局约束为基础,通过改变它的框架UIView。在动画块内部,您应该更改在故事板中添加的图像视图约束。

要获得对您的故事版创建的约束的引用,请创建一个IBOutlet,作者为控制 - 将它们拖动到您的视图控制器。这将在您的代码中创建一个类型为NSLayoutConstraint的变量。在动画块内部,更改要更改的每个约束的constant属性,然后在视图上调用layoutIfNeeded

UIView.animateWithDuration(1, animations: { 

    yourConstraint.constant = 20 
    // any other constraints... 
    // ... 
    thumbnailImageView.layoutIfNeeded() 
}) 
+0

我希望它不会来,因为我必须改变每个设备屏幕的常量。这是处理这种自动布局问题的唯一方法吗? – Pangu

+0

您不应该在每个设备基础上更改常量,您应该修改具有约束的比例乘数。 – paulvs

+0

我不确定我是否理解...... ?? ...比例高度乘数已经在故事板中被修改过...请举例吗? – Pangu