2015-12-15 38 views
9

Chcę zrobić animację taką jak "podczas przewijania collection view cell kołek z adnotacją przesuwa się w górę/w dół na końcu przewijania, ale jak zrobić animację, np. Szpilka do adnotacji idzie w górę po uruchomieniu przewijanie i adnotacji pin idzie w dół podczas przewijania koniec w collection viewJak zrobić animację w niestandardowym węźle do adnotacji, gdy widok adnotacji aktualizacji

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

marginesie, 'UpdateMapAnotationPin' brakuje zamknięcie '}' – Coderchu

+0

Oznacza, że ​​musisz odświeżyć mapę, a gdy pin przewijania ukryje wszystkie szpilki i po zakończeniu przewijania pin show. czy mam rację? –

+0

Nie tak, że szpilki nie są ukryte w dowolnym momencie –

Odpowiedz

1

myślę chcesz animowane jak Airbnb adnotacji aplikacji. trzeba wybrać pin dzwoniąc to viewforAnimation metoda

Kroki 1.Make adnotacja używana przez assigni ng niestandardowy id jak ten

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 wszystkie adnotacje

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) 

         } 
        } 
       } 

typ 5.Set nowego wybranego annoatation w 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 


}