IOS Swift: как наложить два изображения, которые увеличиваются в одно и то же время, не теряя координаты наложения изображения
Моя проблема довольно проста на самом деле...
Представьте себе фоновое изображение, представляющее улицы и здания вокруг вашего дома, обратите внимание, что это созданное изображение цели. Это изображение (вид) масштабируемо и пока настолько хорошо. Подобно карте, но с изображением.
Теперь изображение, которое на вершине улиц, нарисованных на изображении, есть маркеры, представляющие автомобили. Они будут двигаться со временем и, следовательно, будут двигаться динамически. Я успешно разместил автомобили в нужном месте на изображении, но когда я увеличиваю/уменьшаю, автомобили уходят с места. Обратите внимание: я не хочу, чтобы автомобили менялись по размеру, они всегда останутся прежними.
По существу, очень похож на маркер карты поверх карт Google, но вместо карты у меня есть фоновое изображение, а вместо маркеров у меня есть другие изображения (автомобили).
Теперь для реализации...
У меня есть простой ScrollableView, который содержит изображение. Я пытаюсь наложить другие несколько изображений, которые я хочу сохранить, но не увеличивать или уменьшать масштаб (или, по крайней мере, не так сильно, как основной рисунок). Я бы сказал, что он похож на карту, на которой есть контакты местоположения, но она просто использует фотографии.
Я делаю это в Swift и последней версии iOS (9x)
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate
{
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var pin1View: UIImageView!
@IBOutlet weak var pin2View: UIImageView!
override func viewDidLoad()
{
super.viewDidLoad()
self.scrollView.minimumZoomScale = 1.0;
self.scrollView.maximumZoomScale = 10.0;
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
{
let pin1_X = self.pin1View.frame.origin.x
let pin2_Y = self.pin2View.frame.origin.y
//I guess I need to do something here but not sure
return self.imageView
}
}
Любые советы очень ценятся. Я googled, но не мог найти примеры и все еще изучать взгляды и быстро, а также общие мобильные устройства.
Благодарим за помощь.
Ответы
Ответ 1
У вас есть центр изменения штыря соответственно. Используйте этот обновленный код:
class ViewController: UIViewController, UIScrollViewDelegate
{
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var pin1View: UIImageView!
@IBOutlet weak var pin2View: UIImageView!
var pin1ViewCenter : CGPoint = CGPointZero
var pin2ViewCenter : CGPoint = CGPointZero
override func viewDidLoad()
{
super.viewDidLoad()
self.scrollView.scrollEnabled = true
self.scrollView.minimumZoomScale = 1.0
self.scrollView.maximumZoomScale = 10.0
pin1ViewCenter = pin1View.center
pin2ViewCenter = pin2View.center
self.scrollView.contentSize = self.imageView.frame.size
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
{
return self.imageView
}
func scrollViewDidZoom(scrollView: UIScrollView) {
let scaleAffineTransform = CGAffineTransformScale(CGAffineTransformIdentity, scrollView.zoomScale, scrollView.zoomScale)
var translatedPoint = CGPointApplyAffineTransform(pin1ViewCenter, scaleAffineTransform)
pin1View.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, translatedPoint.x - pin1ViewCenter.x , translatedPoint.y - pin1ViewCenter.y)
translatedPoint = CGPointApplyAffineTransform(pin2ViewCenter, scaleAffineTransform)
pin2View.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, translatedPoint.x - pin2ViewCenter.x, translatedPoint.y - pin2ViewCenter.y)
}
func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
let scaleAffineTransform = CGAffineTransformScale(CGAffineTransformIdentity, scale, scale)
scrollView.contentSize = CGSizeApplyAffineTransform(self.imageView.bounds.size, scaleAffineTransform)
}
}