簡體   English   中英

更新注釋視圖時如何在自定義注釋引腳中執行動畫

[英]How to do animation in custom annotation pin when update annotation view

我想進行動畫,例如“當滾動collection view cell ,注釋引腳在滾動結束時向上/向下移動。但是當在collection view滾動結束時開始滾動和注釋引腳變為向下時,注釋引腳之類的動畫如何上升

//code --> For Scrolling
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    if scrollView == collectionView {
        NSLog("page collection %d",Int(scrollView.contentOffset.x/scrollView.frame.size.width))
        self.UpdateMapAnotationPin(Int(scrollView.contentOffset.x/scrollView.frame.size.width))
    }
}

//  -->When Update Pin

func UpdateMapAnotationPin(vIndex : Int) {
    if self.mapAnnotations.count != 0 {
        let info = self.mapAnnotations[vIndex]
        let aView = map.viewForAnnotation(info)
        info.imageName = "ic_map_pin1"
        info.tagPin = vIndex
        aView?.image = UIImage(named: info.imageName)

        if aView != nil {
            self.animationWithView(aView!)
        }
    }
}
//   --> For animation

func animationWithView(mkView : MKAnnotationView) {
    let point:MKMapPoint  =  MKMapPointForCoordinate(mkView.annotation!.coordinate);
    let endFrame:CGRect = mkView.frame;
    mkView.frame = CGRectMake(mkView.frame.origin.x, mkView.frame.origin.y - 20, mkView.frame.size.width, mkView.frame.size.height);
    let delay = 0.03
    UIView.animateWithDuration(0.5, delay: delay, options: UIViewAnimationOptions.CurveLinear, animations:{() in
        mkView.frame = endFrame
        }, completion:{(Bool) in
            UIView.animateWithDuration(0.05, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations:{() in
                mkView.transform = CGAffineTransformMakeScale(1.0, 1.0) }, completion: {(Bool) in
                    UIView.animateWithDuration(0.3, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations:{() in
                        mkView.transform = CGAffineTransformIdentity
                        }, completion: nil)
            })
    })
}

我想你想像AirBnb應用程序注釋一樣動畫。 你必須通過調用它的viewforAnimation方法來選擇引腳

步驟1.通過像這樣分配自定義ID來使用注釋

class GridAnnotation: NSObject ,MKAnnotation{
    var title: String?
    var coordinate: CLLocationCoordinate2D
    var info: String
    var index: String

    init(title: String, coordinate: CLLocationCoordinate2D, info: String,index: String) {
        self.title = title
        self.coordinate = coordinate
        self.info = info
        self.index = index
    }
} 
 override func viewDidLoad() {
        super.viewDidLoad()
 let annotationStart = GridAnnotationStart(title: "", coordinate: firstLocation.coordinate, info: "\(zoneCreateModal.id)",index: "\(0)")

                    self.mapVw.addAnnotation(annotationSta

rt)

}

2.獲取所有注釋

 let arrAllAnnotations = self.mapVw.annotations.filter { $0 !== self.mapVw.userLocation }


 for someAnnotation in annotationsToRemove {
                    let strId = "Your current id"
                    if someAnnotation.isKind(of: AnnotationModal.self) {
                        let annotaion = someAnnotation as! AnnotationModal
                        if annotaion.info == strId {
//Call view for animation
    self.mapVw.selectAnnotation(someAnnotation, animated: true)

             self.mapVw.view(for: someAnnotation)

                        }
                    }
                }

5.在viewForAnnotation中設置新選擇的annoatation的類型

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

        if (annotation.isKind(of: MKUserLocation.self)) {
            return nil
        }

 if annotation.isKind(of: GridAnnotationZoomModal.self) {
            let anView = MKAnnotationView(annotation: annotation, reuseIdentifier: "landingPoints")
            let annotationInfo = annotation as! GridAnnotationZoomModal
            imgView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
if anView.isSelected == true {
                imgView.image = UIImage(named: "Your selected image name")
            }else{
 imgView.image = UIImage(named: "Your image not selected name")

}           

            anView.isDraggable = false
            anView.isEnabled = true
            anView.isUserInteractionEnabled = true
            anView.tag = Int(annotationInfo.index)!
            anView.addSubview(imgView)
            anView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
            anView.centerOffset = CGPoint(x: 0,y: -15)
            return anView
        }
return nil


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM