2016-11-27 1 views
1

У меня есть проект Xcode с mapView. Я загружаю мой друг (Kevin) из этого массива:Swift MapView не сохраняет последний сдвиг при заполнении элемента изображения Xib

myProfiles.append(UserClass 
    (locationLatitude:44.067, locationLongitude:-88.296, 
     id:1,username: "Kevin" 
    ) 
) 

У меня есть customAnnotation, который отображает мой друг на карте. Аннотации друзей находятся внизу карты. Поэтому, когда я нажимаю на аннотацию, mapView должен выдвигать на 203 пробела и оставаться там.

// triggered when the user selects an annotation. We are clicking on Kevin 
func mapView(_ mapView: MKMapView, didSelect annotationView: MKAnnotationView) 
{ 
    print("before setting map") 
    let adjustedBy: CGFloat = 203.0 
    self.mapView.frame.origin.y = self.mapView.frame.origin.y - adjustedBy 
    self.populateSelectedProfile() 
} 

func populateSelectedProfile() { 
    DispatchQueue.main.async { 
     // the tag 1000 is for the first user in array (username: Kevin) 
     if let userXib = self.view.viewWithTag(1000) as? User { 
      print("setting up user") 
      userXib.isHidden = false 
      userXib.userImageView.image = UIImage(named: "user") 
     } 
    } 
} 

populateSelectedProfile начнет заселять XIB с имиджем друга (ImageView создается застройщиком):

@IBOutlet weak var userImageView: UIImageView! 

Но что происходит, является то, что карта после нажатия на вершину, он идет вниз сразу после заполнения изображения. Это можно увидеть, если вы разместите точку прерывания на печатной линии:

print("setting up user") 

Почему mapView сместился снова?

Обращаем ваше внимание, что: Мне не нужно отображать изображение. Я знаю, как это сделать. Моя проблема связана с тем, что mapView снова падает.

ответ

1

Необходимо сначала загрузить загрузку xib с помощью обработчика завершения, а затем сделать свою часть анимации. Я думаю, что загрузка xib из памяти сбрасывает карту в исходное состояние

// triggered when the user selects an annotation. We are clicking on Kevin 
func mapView(_ mapView: MKMapView, didSelect annotationView: MKAnnotationView) 
{ 
    print("before setting map") 
    let adjustedBy: CGFloat = 203.0 
    self.mapView.frame.origin.y = self.mapView.frame.origin.y - adjustedBy 
    self.populateSelectedProfile { finished in 
     DispatchQueue.main.async { 
      let adjustedBy: CGFloat = 203.0 
      self.mapView.frame.origin.y = self.mapView.frame.origin.y - adjustedBy 
     } 
    } 
} 

func addUserXib(completion: @escaping ((_ finished: Bool) -> Void)) { 
    if let userXib = Bundle.main.loadNibNamed("User", owner: self, options: nil)?[0] as? User 
    { 
     userXib.tag = 1000 
     userXib.frame = CGRect(x: width, y: 0, width: width, height: height * (3/8)) 
     userXib.isHidden = true 
     self.view.addSubview(userXib) 
    } 
} 
Смежные вопросы