请有人可以解决MapView问题。我有一个自定义注释。当用户点击注释时,我希望它在屏幕上移动然后消失。作为对动画代码的测试(因为我是新手!),我尝试了以下操作:
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
guard let pinTapped = view.annotation as? Pin else {return}
guard let pinName = pinTapped.title else { return }
let endFrame = CGRect(x: view.frame.origin.x, y: view.frame.origin.y - self.view.bounds.size.height, width: view.frame.size.width, height: view.frame.size.height)
UIView.animate(withDuration: 3.0, animations: {
view.frame = endFrame
}) { (finished) in
self.mapKitView.removeAnnotation(pinTapped)
}
}
我希望注释会在3秒钟内滑动到新位置,然后消失。实际发生的情况是,它立即移动到新位置,然后滑回原始位置,然后消失。我在做什么错了?
答案 0 :(得分:0)
extension UIView {
func disappearAnimation(_ completion: @escaping () -> ()) {
let opacity = CASpringAnimation(keyPath: "opacity")
let position = CASpringAnimation(keyPath: "position")
let group = CAAnimationGroup()
opacity.fromValue = 1
opacity.toValue = 0
position.fromValue = self.center
position.toValue = CGPoint(x: self.center.x, y: self.center.y - 300) //You can change it
group.animations = [opacity, position]
group.duration = 1.1 // You can change it
group.repeatCount = 0
group.autoreverses = false
group.timingFunction = CAMediaTimingFunction(name: .easeOut) //You can change also timing func
layer.add(group, forKey: nil)
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
completion()
}
}
}
添加此动画并根据需要自定义
func pinTapped(_ pin: MKAnnotationView) {
pin.disappearAnimation {
//Remove your view after animation is shown
}
}
我希望该解决方案有帮助