2015-12-15 11 views
9

Ich möchte Animation wie "wenn Scroll collection view cell der Annotation Pin geht nach oben/unten am Ende des Scrollen. Aber wie Animation wie Annotation Pin geht nach oben beim Start unten Scrollen und Anmerkungsstift geht, wenn Ende in collection viewAnimation in benutzerdefinierte Annotation pin, wenn Update Annotation 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) 
      }) 
    }) 
} 
+0

Randnotiz, 'UpdateMapAnotationPin' a fehlt Schließen '}' – Coderchu

+0

Bedeutet, Sie müssen Karte aktualisieren und beim Scrollen Pin alle Pins ausblenden und nach dem vollständigen Scroll Pin zeigen. habe ich recht? –

+0

nein, nicht so, dass Pins nicht jederzeit ausgeblendet sind –

Antwort

1

Scrollen ich glaube, Sie wie AIRBNB App Anmerkungen animiert werden soll. Sie haben den Stift wählen, indem es viewforAnimation Methode

Schritte 1.Make Aufruf Annotation mittels assigni ng der benutzerdefinierten ID wie dieses

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.Get alle Anmerkungen

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.Set Art der neu gewählte annoatation in viewForAnnotation

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 


} 
Verwandte Themen