Я создаю небольшое приложение со Свифт, где хочу достичь следующего: - MapView с несколькими аннотациями - Нажмите на одну из аннотаций Детали в накладке, которая перемещается снизу и заполняется ок. половина экрана - В верхней половине дисплея по-прежнему отображается MapView. A Щёлкните на карте, чтобы закрыть детали.ViewController as Overlay on MapView в Swift (например, пользовательский интерфейс приложения Google Maps)
Теперь я много читал о различных возможностях. Во-первых, я попытался с помощью ContainerView с чем-то вроде этого:
@IBOutlet weak var detailsContainerYPosition: NSLayoutConstraint!
func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!) {
UIView.animateWithDuration(0.3, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
self. detailsContainerYPosition.constant = 0
self.view.layoutIfNeeded()
}, completion: nil)
}
Проблема с этим было, что метод viewDidLoad() был только уволен один раз, и я хотел бы использовать, чтобы создать страницу сведений после передачи некоторых данных классу контроллера.
Так что в следующий я играл с настраиваемой Segue и кулачок с этим:
class DetailsSegue: UIStoryboardSegue {
override func perform() {
// Assign the source and destination views to local variables.
var mapView = self.sourceViewController.view as UIView!
var detailsView = self.destinationViewController.view as UIView!
// Get the screen width and height.
let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
// Specify the initial position of the destination view.
detailsView.frame = CGRectMake(0.0, screenHeight, screenWidth, 140)
// Access the app's key window and insert the destination view above the current (source) one.
let window = UIApplication.sharedApplication().keyWindow
window?.insertSubview(detailsView, aboveSubview: mapView)
// Animate the transition.
UIView.animateWithDuration(0.4, animations: {() -> Void in
detailsView.frame = CGRectOffset(detailsView.frame, 0.0, -140)
}, completion: nil)
}
}
Это, кажется, лучшее решение, потому что я мог бы послать некоторые данные на новый контроллер в prepareForSegue() function И метод viewDidLoad() запускается каждый раз, когда этот сеанс запущен, но теперь я боюсь: - Каждый раз, когда кликается клика и вызывается segue, вводится новый View. Но если ОДНО подробный вид уже виден, я хотел бы просто обновить этот файл - Я не могу найти способ развязать этот сеанс при вызове метода didDeselectAnnotationView из MapView.
Но, возможно, у кого-нибудь есть даже лучший способ достичь пользовательского интерфейса, подобного этому.
Спасибо, но это похоже, что ваш проект GitHub пуст;) – Pym
О, извините за это. Я просто обновил проект, так что теперь он содержит фактический код. – flavordaaave
Brilliant my friend; Спасибо – gadget00