簡體   English   中英

UIScrollView如何更改框架,但不更改邊界? UIScrollView如何工作?

[英]How does UIScrollView change the frame, but not the bounds? How does UIScrollView work?

我了解框架和界限之間的區別,界限是視圖的局部坐標系,而框架是超級視圖。

但是,對於滾動視圖,我有點困惑。

當我在UIScrollView中有一個UIImageView並捏以將其放大時,似乎框架變得更大(寬度和高度)也增加了相應UIImage的寬度和高度。

但是,似乎UIImageView的邊界根本沒有改變。

為什么是這樣? 滾動視圖如何針對所有這些工作? 我已經閱讀了多個問題並檢查了文檔,但是這種解釋使我難以理解。

放大UIScrollView如何影響其內容? 它只是改變縮放視圖的框架,但不改變邊界嗎?

請參閱我的書中的說明:

滾動視圖通過將縮放變換應用於可縮放視圖來縮放; 因此,可縮放視圖的框架也被縮放。 此外,滾動視圖還涉及使滾動繼續正常工作:用戶滾動時的限制應繼續匹配內容的限制,而scrollRectToVisible:animated:之類的命令應針對相同的值繼續以相同的方式工作。 因此,滾動視圖會自動縮放其自己的contentSize以匹配當前的zoomScale。 (您實際上可以通過重寫UIScrollView子類中的setContentSize來檢測到這種情況:您可以看到滾動視圖在縮放時調整其自己的內容大小。)

基本上(盡管從上面的引用中並不能很清楚),我們沒有涉及可伸縮視圖框架(或任何應用了非身份轉換的視圖)的框架,在這里就是這種情況。 Apple的UIView文檔非常清楚地說明了這一事實。 因此,您不應該查看幀-僅查看變換。 您正在讀取的幀純粹是作為變換更改的副作用而更改的。

至於可伸縮視圖的邊界,顯然邊界不會改變。 這就是轉換如何工作的重點。 它保持恆定的centerbounds ,因此盡管進行了變換,但子視圖和圖形仍繼續在參考框架坐標內正確運行。 我的書也通過了解使受益。

另一方面,滾動視圖自身的邊界當然可以更改其原點,不僅因為這與滾動視圖滾動的含義完全相同。 滾動邊界原點的變化,簡單明了。 而且這在縮放過程中也就不足為奇了,因為,正如我剛剛說過的,內容大小已更改,因此可以重新定位內容,以便在縮放時始終保持一致地顯示內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM