1

我有一个 UIImageView 我想将其外边缘向中心缩放(准确地说是顶部和底部边缘)。到目前为止,我能做到的最好的只是一个边缘塌陷到另一个边缘(它不会移动)。我希望两个边缘都向中间折叠。

我尝试将锚点设置为 0.5,0.5 但这并没有解决问题(没有任何变化)。

有没有办法设置 ImageView 使其向内向中间缩放,以便外边缘向中心折叠?

这是我最好的尝试:

override public func viewWillAppear(animated: Bool)
    {
        super.viewWillAppear(animated)
        var uimg = UIImage(named: "img.PNG")!
        var img:UIImageView = UIImageView(image: uimg)
        img.layer.anchorPoint = CGPointMake(0.5, 0.5)
        view.addSubview(img)
        UIView.animateWithDuration(5, animations:
            { () -> Void in
                img.frame = CGRectMake(img.frame.origin.x,img.frame.origin.y,img.frame.width, 0)
            })
            { (finished) -> Void in
                //
        }

    }
4

2 回答 2

2

您可以使用 UIView 的 transform 属性进行缩放。似乎缩放不允许您将值设为 0,并且它会在没有任何动画的情况下达到最终值。因此,您基本上可以使缩放 y 值可以忽略不计,例如 0.001。

   imageView.transform = CGAffineTransformMakeScale(1, 0.001)

你也可以使用核心动画来缩放,使用 CABasicAnimation,这样会更简单,

    let animation = CABasicAnimation(keyPath: "transform.scale.y")
    animation.toValue = 0
    animation.duration = 2.0
    animation.fillMode = kCAFillModeForwards
    animation.removedOnCompletion = false
    imageView.layer.addAnimation(animation, forKey: "anim")

或者你也可以使用你一直使用的方法,简单的设置框架,

    var finalFrame = imageView.frame
    finalFrame.size.height = 0

    finalFrame.origin.y = imageView.frame.origin.y + (imageView.frame.size.height / 2)

    UIView.animateWithDuration(2.0, animations: { () -> Void in
        self.imageView.frame = finalFrame
    })
于 2014-12-23T00:12:47.077 回答
1

您的新框架的原点位于同一位置。您需要将原点向下移动,同时降低高度:

img.frame = CGRectMake(img.frame.origin.x, img.frame.origin.y + (img.frame.size.height/2), img.frame.size.width, 0);
于 2014-12-23T00:01:30.363 回答