如何在动画期间获取UIImage的当前大小

时间:2016-09-06 20:45:59

标签: ios swift uiimage uiviewanimation

我有一个图像(innerCircle),它使用以下动画随着动画的增长和缩小:

UIView.animateWithDuration(5, delay:0, options: [.Repeat, .Autoreverse], animations: { () -> Void in
        self.innerCircle.transform = CGAffineTransformMakeScale(3.5, 3.5)
    }) { (finished: Bool) -> Void in
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.innerCircle.transform = CGAffineTransformIdentity

我想在动画期间的任何时候获取图像的当前大小,以便我可以检查它何时超出某个点。我想这样做,所以我可以改变" Inhale"到"呼气"反之亦然。

我尝试过使用

let innerCircleWidth = self.innerCircle.image!.size.width

但只获得初始宽度值。它没有更新。

非常感谢!

2 个答案:

答案 0 :(得分:0)

那是因为图像的大小没有变化。应用变换不会改变视图的大小。

答案 1 :(得分:0)

使用UIView.animateWithDuration获取有关当前显示内容的准确信息时,您应该检查presentationLayer动画视图的innerCircle.layer.presentationLayer()?.frame,在您的情况下import UIKit import XCPlayground let outerCircle = UIView(frame: CGRect(x: 0, y: 0, width: 1000, height: 1000)) let innerCircle = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100, height: 100)) outerCircle.addSubview(innerCircle) innerCircle.center = outerCircle.center innerCircle.backgroundColor = UIColor.redColor() UIView.animateWithDuration(5, delay:0, options: [.Repeat, .Autoreverse], animations: { () -> Void in innerCircle.transform = CGAffineTransformMakeScale(3.5, 3.5) }) { (finished: Bool) -> Void in UIView.animateWithDuration(1, animations: { () -> Void in innerCircle.transform = CGAffineTransformIdentity }) } class TimerObject: NSObject { override init() { super.init() let timer = NSTimer(timeInterval: 0.10, target: self, selector: #selector(self.printPresentationFrame), userInfo: nil, repeats: true) NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode) } @objc func printPresentationFrame() { print(innerCircle.layer.presentationLayer()?.frame) } } let timerObject = TimerObject() XCPlaygroundPage.currentPage.liveView = outerCircle 不是视图的框架本身。有关此内容的详细信息,请参阅here

要了解其工作原理,您可以将以下代码放在一个快速的游乐场中。

row.record.cells["exception"].value.join (" ")