Skip to main content
 首页 » 操作系统

ios之从中心点折叠 UIImageView

2024年01月01日64cloudgamer

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

我已尝试将 anchor 设置为 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 
                // 
        } 
 
    } 

请您参考如下方法:

您可以使用 UIView 的变换属性进行缩放。似乎缩放不允许您将值设为 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 
    })