2012-01-10 93 views
2

有沒有一種方法可以控制縮放UIScrollView的哪些子視圖,哪些不是?具有多縮放級別的UIScrollView?

例如,我有一個地圖作爲底層(不是MapKit,只是一個平面圖像),可以放大和平移。根據用戶選擇,將標記放置在地圖上以指示特定的建築物/地點等。這些標記也是UIImageView,使用地圖圖像的像素座標(eq Building X在(934,842),標記放置這裏)。然而,縮小這些標記有點難以看到,因爲它們也縮放/縮小到與地圖相同的水平。

那麼有沒有一種方法可以告訴UIScrollView不縮放標記圖像,但仍然允許它在地圖圖像放大時平移/重新定位它們?

回答

1

我想你可能會尋找方法是UIScrollViewDelegate

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

這可以讓你回到你想要的變焦被應用於視圖,你的情況,這將是背景地圖圖像。

如果您不想同時縮放標記,則需要將標記直接添加爲UIScrollView的子視圖,而不是將它們添加爲背景地圖UIImageView的子視圖。

正如您所提到的,標記相對於地圖背景UIImageView放置,這意味着如果您將標記添加到UIScrollView,而不是在您更改滾動時將它們放置在地圖上的相同位置。

要解決這個問題,您需要計算相對於UIScrollView的等效座標。

雖然這可能看起來相當艱鉅,但一旦知道縮放因子,實際上確實相當不重要。

爲了得到縮放因子,使用UIScrollViewDelegate方法

- (void)scrollViewDidZoom:(UIScrollView *)scrollView 

然後你就可以通過調用得到放大倍數:

scrollView.zoomScale 

,並重新計算標記通過應用此zoomScale原來的座標值,並相應地重新定位您的標記。

參考:

UIScrollView Class Reference

UIScrollViewDelegate Protocol Reference

希望這有助於:)

+0

當你這樣說的話,我幾乎有點惱火我沒有意識到自己。感謝堆,我會試一試,看看我能否讓它們正確定位。 PS:我會upvote你的答案,但我沒有代表做到這一點呢:P – Luefox 2012-01-12 22:16:38

+0

不用擔心:)希望你得到它的工作!如果你這樣做,你可以接受答案,而不是upvoting它;) – Mutix 2012-01-13 08:31:57

+0

正確的,我理解獲得正確的縮放座標的數學,但我將如何強制他們重新定位,因爲地圖移動?某種onZoom - > moveMarkers函數。 – Luefox 2012-01-15 14:45:44