我的UIScrollView的UIView的包含的一個實例的實例。 UIView只是一個UIImageView實例水平數組的容器。 - 縮放由UIScrollView和UIScrollViewDelegate提供。我想約束縮放只發生在水平軸上,根本沒有垂直縮放。我如何做到這一點?UIView。我如何限制擴展到一個尺寸只有
有沒有一種方式,例如,子類的UIView並重寫適當的方法,以防止垂直縮放?我喜歡這種方法,但我就重寫該方法和什麼重寫的方法應該真正做到不清楚。
乾杯, 道格
我的UIScrollView的UIView的包含的一個實例的實例。 UIView只是一個UIImageView實例水平數組的容器。 - 縮放由UIScrollView和UIScrollViewDelegate提供。我想約束縮放只發生在水平軸上,根本沒有垂直縮放。我如何做到這一點?UIView。我如何限制擴展到一個尺寸只有
有沒有一種方式,例如,子類的UIView並重寫適當的方法,以防止垂直縮放?我喜歡這種方法,但我就重寫該方法和什麼重寫的方法應該真正做到不清楚。
乾杯, 道格
與我在this answer中描述的類似,您可以創建一個UIView子類並重寫-setTransform:accessor方法來調整UIScrollView將嘗試應用到您的UIView的轉換。設置此UIView的託管您的內容子視圖,使之成爲的UIScrollView的子視圖。
在您的覆蓋-setTransform:中,您需要接受UIScrollView想要應用並進行調整的轉換,以便縮放僅在一個方向上生效。從documentation on how CGAffineTransform matrices are constructed,我相信下面的實現應該限制你的縮放只是沿水平方向:
- (void)setTransform:(CGAffineTransform)newValue;
{
CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
constrainedTransform.a = newValue.a;
[super setTransform:constrainedTransform];
}
這限制了Y軸,但UIScrollView的行爲 - 在捏 - 期間,就好像兩個都被轉換了。這是內容偏移量和內容大小增加,以在兩個軸上進行縮放。有關我可能錯過的任何想法? – 2015-06-16 20:38:42
使用OS 3.0,你可以告訴變焦可放大到了滾動一個矩形。我在檢測水龍頭的邏輯中有這個。
CGRect zoomRect = [self zoomRectForScale:newScale withCenter:CGPointMake(tapPoint.x, tapPoint.y) inScrollView:scrollView];
[scrollView zoomToRect:zoomRect animated:YES];
的爲另一部分,你將不得不通過舒展的新框架具有與原始比例圖像的意見,並在同一個中心點居中。爲此,您可以在動畫定時一樣的縮放動畫,使它看起來正確的,但我認爲這將是做到這一點的唯一途徑。
感謝你的這個coneybeare。所以我相信我理解這個方法的用法,如果我使用scrollview.bounds作爲矩形,我會假設將視圖的尺寸固定爲滾動視圖的尺寸,是否正確? 乾杯, Doug – dugla 2009-09-14 21:43:32
coneybeare, 實際上,從你的代碼片段看起來你正在處理所有縮放,因爲你正在調用zoomToRect:自己動畫,而不是簡單地覆蓋它。我寧願讓UIScrollView處理所有這些,只需插入我的約束。你會接近要求我實現我自己的平移/縮放功能。你能否提供更多的啓發。 乾杯, Doug – dugla 2009-09-14 22:05:08
在scrollViewDidZoom:,調整內容視圖的基礎上zoomScale變量,重置zoomScale到1.0,然後在內容視圖上執行setNeedsDisplay。在內容視圖的drawRect:中處理實際縮放(無論您想要的方向)。
醜陋的細節:
當變焦過程中,該UIScollView改變contentOffset和contentScale,所以在scrollViewWillBeginZooming拯救那些前值:和scrollViewDidZoom:所以您可以根據變焦自己計算新的contentOffset。
由於改變zoomScale將立即觸發另一scrollViewDidZoom:,必須設置重置zoomScale前BOOL(後清零)。在scrollViewDidZoom:開始時測試BOOL,如果爲true,則返回。
您可能需要抑制scrollViewDidScroll:而變焦過程中(測試BOOL;設置在scrollViewWillBeginZooming:和scrollViewDidEndZooming清除:),所以你自己contentOffsets被同時放大使用正在處理。
所以你想水平拉伸圖像?如果你不放大垂直軸,那麼圖像將變得歪斜 – coneybeare 2009-09-14 18:21:03
是的。那就是我所追求的。 – dugla 2009-09-14 18:49:10