我有一张UIImageView
的图片,这张图片是一张典型的地图选择器。我把它放在故事板上的地图上并指定了一些约束条件。
当用户拖动我的地图时,该图像保持不变,我想找到一种动画方式 - 基本上我想要稍微挤压它以使它看起来像被拖动。
我已经有两种方法:
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
}
和
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
}
但我不知道如何动画更改为UIImageView。
我尝试向regionWillChangeAnimated
添加以下代码:
myPositionPicker.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
yawpPositionPicker.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: nil)
(其中myPositionPicker
是我的UIImageView
),但我收到了错误
Static member animate cannot be used on instance of type UIImageView
我认为对我来说最好的动画是UIViewAnimationOptions.curveEaseIn
,但我不知道如何将它附加到我的UIImageView
。你能给我一些提示吗?
答案 0 :(得分:1)
首先,您尝试在实例 myPositionPicker 上使用静态方法“animate”。这是错的。只需替换
myPositionPicker.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
yawpPositionPicker.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: nil)
使用:
UIView.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
// Do whatever animations you want here.
}, completion: nil)
接下来,如果你想创建一些简单的动画(比如改变UIImageView位置或改变它的大小) - 你可以使用你已经创建的约束而不使用仿射变换。
例如,如果图像视图与地图视图垂直居中。首先,在UIViewController中为此约束创建一个特殊的@IBOutlet:
@IBOutlet var pickerCenterYConsraint: NSLayoutConstraint!
其次,在故事板中将此插座连接到约束。
第三,据我所知,您的视图控制器是地图视图的委托。所以,让我们实现这样的地图视图委托协议:
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
UIView.animate(withDuration: 1.5, delay: 0.05, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
self.pickerCenterYConsraint.constant = 25.0
self.view.layoutIfNeeded()
}, completion: nil)
}
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
UIView.animate(withDuration: 1.5, delay: 0.05, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
self.pickerCenterYConsraint.constant = 0.0
self.view.layoutIfNeeded()
}, completion: nil)
}
而且......就是这样!现在,您的图像视图将在地图视图拖动期间进行动画处理。 如果你不喜欢这个解决方案 - 你可以根据约束创建自己的动画。基本上你可以用限制做很多事情。例如,旋转除外。