当用户拖动MKMapView时,我该如何为UIImageView添加动画效果?

6

我有一个带有图像的UIImageView,这个图像是典型的地图选择器。我在storyboard中将其放置在地图上并分配了一些约束。

当用户拖动我的地图时,那个图像保持不变,我想找到一种使它动画的方法 - 基本上我想把它压缩一点,以便看起来像是被拖动了。

我已经有两种方法:

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上。你能给我一些提示吗?

1个回答

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)

With:

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)
}

好的,这就是全部内容!现在您的图像视图将在地图视图拖动期间进行动画处理。 如果您不喜欢这个解决方案 - 您可以基于约束创建自己的动画。基本上,您可以使用约束做很多事情。例如旋转除外。


有没有一种方法可以稍微倾斜图像?或者拉伸/缩小图像?我需要通过拉伸、倾斜等方式来实现效果,而不是上下移动图像。 - user3766930

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接