我有一个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
//
}
}
答案 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);