2016-12-08 20 views
6

我有一個UIImageView在那裏有一個圖像,這個圖像是一個典型的地圖選擇器。我把它放在故事板的地圖上,並分配了一些限制條件。如何在用戶拖動MKMapView時爲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。你能給我任何提示嗎?

回答

1

首先,您要在實例myPositionPicker使用靜態方法「動畫」。這是錯誤的。只需更換

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的位置改變或改變它的大小) - 你可以只使用你已經創建的約束和唐不使用仿射變換。

例如,如果圖像視圖與地圖視圖垂直居中。首先,創建一個特殊的@IBOutlet這個約束在UIViewController:

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

而且......就這樣!現在,您的圖片視圖將在地圖視圖拖動過程中呈現動畫效果。 如果你不喜歡這個解決方案 - 你可以根據約束創建你自己的動畫。基本上你可以用很多限制來做很多事情。例如,除了旋轉之外。

+0

有沒有辦法讓圖像稍稍傾斜?或拉伸/縮小圖像?我需要達到的效果不是通過上下移動圖像,而是拉伸,傾斜等。 – user3766930

相關問題