Я думаю, что вы можете искать метод UIScrollViewDelegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
Это позволяет вам вернуть вид, к которому вы хотите применить масштабирование, в вашем случае это будет фоновое изображение карты.
Если вы не хотите, чтобы маркеры масштабировались одновременно, вам нужно будет добавить маркеры непосредственно как подпредставления UIScrollView
вместо того, чтобы добавлять их в качестве подпредставлений вашей фоновой карты UIImageView
.
Как вы упомянули, маркеры располагаются относительно фона карты UIImageView
, это означает, что если вы добавите маркеры к UIScrollView
, они не будут размещены в одной и той же позиции на карте после изменения свиток.
Чтобы решить эту проблему, вам необходимо рассчитать эквивалентные координаты относительно UIScrollView
.
Хотя это может показаться довольно пугающим, на самом деле это довольно тривиально, если вы знаете коэффициент масштабирования.
Чтобы получить коэффициент масштабирования, используйте метод UIScrollViewDelegate
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
Тогда вы можете получить коэффициент масштабирования, позвонив по номеру:
scrollView.zoomScale
и пересчитайте координаты маркера, применив zoomScale
к исходным значениям, и соответственно измените положение маркеров.
Справка:
Справочник по классам UIScrollView
Справочник по протоколу UIScrollViewDelegate
Надеюсь, это поможет:)