Могу ли я получить очки UIScreen от очков GMSMarker? - PullRequest
0 голосов
/ 13 ноября 2018

Я включил вид карты Google в свой проект и успешно показываю на нем маркер.Карта Google предоставляет только поп-анимацию маркера.Я хочу добавить анимацию для маркеров.

Я успешно реализовал увеличение и уменьшение анимации радиуса, но мне нужна анимация удаления маркера.

Так что моя идея такова, как если бы я получил точную точку маркера вЗатем на UIScreen я опущу булавку сверху моего экрана, которая создаст эффект анимации перетаскивания.

наконец-то я получил анимацию отбрасывания снизу кода, но есть одна проблема, из-за которой я не получил идеальные точки из карты, чтобы показатьотбросьте анимацию.

//Drop pin
    func setMarker(latitude : Double, longitude : Double, isForJobLocation : Bool = false){

        let point = mapView.projection.point(for: CLLocationCoordinate2D(latitude: latitude, longitude:  longitude))
        let viewPoints = UIApplication.shared.keyWindow!.convert(point, from: mapView)

        print(viewPoints)

        self.showAnimatation(xPosition: viewPoints.x, yPosition: viewPoints.y) {

            let marker1 = GMSMarker(position: CLLocationCoordinate2D(latitude: latitude, longitude:  longitude))
            marker1.icon = UIImage(named: "mapLoadingPin")
            marker1.map = self.mapView
        }

    }

    func showAnimatation(xPosition : CGFloat, yPosition : CGFloat, completion : @escaping (() -> ())){

        let imageView = UIImageView(frame: CGRect(x: xPosition, y: yPosition - 100, width: 44, height: 44))
        imageView.image = UIImage(named: "mapLoadingPin")
        self.view.addSubview(imageView)

        UIView.animate(withDuration: 1.0, animations: {
            imageView.frame.origin.y = yPosition
            self.view.layoutIfNeeded()
        }) { (true) in
            imageView.removeFromSuperview()
            completion()
        }
    }

Пожалуйста, помогите мне.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Я проверил ваш код, и ваша проблема использует origin.y для вашего фрейма imageView.

Точка, определяющая координаты начала прямоугольника.

Согласно документу Apple, происхождение представляет собой minX и minY вашего CGRect. Итак, вы должны рефакторинг вашей позиции как таковой:

imageView.frame.origin.y = yPosition - imageView.bounds.height
0 голосов
/ 22 ноября 2018

Я вижу две проблемы в вашем коде:

  1. Вы конвертируете CGPoint из вашего mapView в систему координат keyWindow. Но затем вы добавляете свой imageView к вашему виду, используя CGPoint, рассчитанный для вашего окна.

  2. Вы не учитываете размер изображения. Я думаю, ваше изображение маркера должно быть расположено горизонтально по центру над точкой на карте. (но это зависит от дизайна вашего маркера)


Следующие изменения должны исправить вашу проблему:

  • Преобразование начала координат GMSMarkers в систему координат родительского просмотра вашего imageView. Заменить

    let viewPoints = UIApplication.shared.keyWindow!.convert(point, from: mapView)

    с

    let viewPoints = self.view.convert(point, from: mapView)

  • Примите во внимание размер imageViews. Источник вашего imageView ( после анимации) должен быть (xPosition - imageView.width / 2, yPosition - imageView.height). В вашем примере замените

    let imageView = UIImageView(frame: CGRect(x: xPosition, y: yPosition - 100, width: 44, height: 44))

    с

    let imageView = UIImageView(frame: CGRect(x: xPosition - 22, y: yPosition - 44 - 100, width: 44, height: 44))


Если это не решит вашу проблему, помогите нам, предоставив скриншот, показывающий неуместные изображения.

...