从中心点折叠UIImageView

时间:2014-12-22 23:40:01

标签: ios xcode swift uiimageview animatewithduration

我有一个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
                //
        }

    }

2 个答案:

答案 0 :(得分: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
    })

答案 1 :(得分:1)

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

img.frame = CGRectMake(img.frame.origin.x, img.frame.origin.y + (img.frame.size.height/2), img.frame.size.width, 0);