通过更改宽度和高度来设置动画矩形

时间:2015-12-09 12:07:15

标签: ios iphone swift animation

ImageView中有UIViewController

enter image description here

我想为此图像设置动画,定期更改宽度和高度。如果单击“扫描代码”,您可以在Iphone上的Apple Wallet应用程序中看到相同的动画。我尝试了很多,但我的代码工作不正确或应用程序在3-5分钟后开始滞后......

这是我的最后一段代码:

class ViewController: UIViewController {
    @IBOutlet weak var focusImage: UIImageView!
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.resizeFocusImageUp()
    }
    func resizeFocusImageUp() {
        UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
            self.focusImage.frame = CGRectMake(
                self.focusImage.frame.origin.x+50,
                self.focusImage.frame.origin.y-50,
                self.focusImage.frame.size.width-50,
                self.focusImage.frame.size.height+50
            )
            self.view.layoutIfNeeded()
            self.view.bringSubviewToFront(self.focusImage)
            }, completion: {(Bool) in
                self.resizeFocusImageDown()
            })
    }

    func resizeFocusImageDown() {
        UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
            self.focusImage.frame = CGRectMake(
                self.focusImage.frame.origin.x-50,
                self.focusImage.frame.origin.y+50,
                self.focusImage.frame.size.width+50,
                self.focusImage.frame.size.height-50
            )
            self.view.layoutIfNeeded()
            self.view.bringSubviewToFront(self.focusImage)

            }, completion: {(Bool) in
                self.resizeFocusImageUp()
        })
    }

}

另外,对于我的ImageView我使用约束: enter image description here

2 个答案:

答案 0 :(得分:2)

正如另一张海报所说,如果你正在使用AutoLayout,那么你需要设置约束的动画,而不是框架。

为高度和高度创建约束您需要在动画中移动视图的宽度和位置。然后从CONSTRAINTS控制拖动到视图控制器的标题中以创建出口。

然后在动画块中更改每个约束的常量值,然后调用layoutIfNeeded来触发动画。 (关键部分是对layoutIfNeeded的调用需要在动画块内。似乎实际上导致约束改变视图的大小/位置。)

所有这一切,对于您在帖子中显示的线条图,使用CAShapeLayer和动画图层路径会更好。你可以获得更加清晰的形状,动画非常流畅。

答案 1 :(得分:1)

//在我的应用程序中正确使用Objective-C代码。根据您的要求做你的东西。

注意:如果您对该对象使用自动分析(图像视图),请在视图中添加以下两行代码。执行加载方法。

  imageView.translatesAutoresizingMaskIntoConstraints = YES;
  imageView.frame = CGRectMake(x, y, width, height);

//Method For Zoom IN Animations Of View
-(void)ZoomInAnimationOfView{

       imageView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.01, 0.01);

    [UIView animateWithDuration:1.0 animations:^{
        imageView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
    } completion:^(BOOL finished) {
        imageView.transform = CGAffineTransformIdentity;

    }];

}

//缩小动画的方法

-(void)ZoomOutAnimationOfView{

      imageView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);

    [UIView animateWithDuration:1.0 animations:^{
        imageView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
    } completion:^(BOOL finished) {
        imageView.transform = CGAffineTransformIdentity;
    }];
}