2015-12-15 12 views
9

Voglio fare un'animazione come "quando si scorre collection view cell il pin di annotazione va su/giù alla fine dello scorrimento." Ma come fare animazione come il pin di annotazione sale all'inizio lo scorrimento e il perno di annotazione va giù quando si scorre fine a collection viewCome eseguire l'animazione nel pin di annotazione personalizzato quando si aggiorna l'annotazione

//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

Nota a margine, 'UpdateMapAnotationPin' manca un closing '}' – Coderchu

+0

Significa che è necessario aggiornare la mappa e quando si scorre lo spillo nascondi tutti i pin e dopo lo scorrimento completo mostra pin. ho ragione? –

+0

no, non è che i birilli non siano nascosti in qualsiasi momento –

risposta

1

Penso che si desidera animato come Airbnb annotazioni app. è necessario selezionare il perno chiamando è viewforAnimation metodo

Passi 1.Make annotazione usando da assigni ng l'ID personalizzato come questo

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 tutte le annotazioni

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) 

         } 
        } 
       } 

tipo 5.Set di nuovo annoatation selezionato nella 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 


} 
Problemi correlati