2009-03-04 77 views
1

我有一個UIScrollView包含一個圖像和一個分段控件,允許用戶切換ScrollView內部的圖像。如果我只是在UIImageView內部交換圖像,它將以放大狀態顯示新圖像。如何將UIScrollView重置回其未放大狀態?如何重置(即取消縮放)UIScrollView?

回答

2

我有詳細的討論如何(以及爲什麼)UIScrollView縮放工作在github.com/andreyvit/ScrollingMadness/

(該鏈接還包含了如何編程方式放大UIScrollView的描述,如何效仿圖片庫式傳呼+變焦+滾動,實例項目和ZoomScrollView類,封裝了一些變焦魔法。)

Quote:

UIScrollView沒有「當前縮放級別」的概念,因爲它包含的每個子視圖可能有其自己的當前縮放級別。請注意,UIScrollView中沒有字段保持當前縮放級別。但是我們知道有人存儲縮放級別,因爲如果捏住縮放子視圖,然後將其轉換重置爲CGAffineTransformIdentity,然後再次捏住,則您會注意到子視圖的前一縮放級別已恢復。事實上,如果你看看反彙編,它是UIView存儲它自己的縮放級別(在_gestureInfo字段指向的UIGestureInfo對象內部)。它還有一套很好的無證方法,如zoomScalesetZoomScale:animated:。 (請注意,它也有一些旋轉相關的方法,也許我們很快就會得到旋轉手勢支持。)

但是,如果我們創建一個新的UIView,只是爲了縮放並添加我們真正的可縮放視圖爲它的孩子,我們將始終從縮放級別1.0開始。我的程序縮放實現是基於這個技巧。

0

如果您在完成縮放縮放事件時未重繪視圖,則縮放因子將由您從viewForZoomingInScrollView:delegate方法返回的視圖的transform屬性設置。要重置此縮放,請將視圖的transform屬性值設置爲CGAffineTransformIdentity。

但是,請注意,您的下一個縮放操作將在先前的縮放縮放停止的位置開始(即您的新縮放將被忽略)。要解決此問題,您可能需要執行一些我描述的內容here

+0

所以當我切換圖像時,我在做以下操作: \t imageView.transform = CGAffineTransformIdentity; 這是你的意思嗎?因爲它似乎沒有影響它。 – Bdebeez 2009-03-04 21:28:13

+0

你如何切換圖像?您的內容是否爲您的UIScrollView查看UIImageView?這個UIImageView是什麼,然後你從viewForZoomingInScrollView返回:?這應該適用於滾動視圖的主要子視圖。 – 2009-03-05 00:49:27