[英]Pinch zooming a UIScrollView on the x-axis only
我希望能夠在UIScrollView上進行縮放,以便子視圖僅在x軸上展開/收縮。
我創建一個UIScrollView,並使用addSubview添加UIViews。 每個UIView中都有一個UILabel。 我應該堅持數組中的這些UIView嗎?
縮放時,我不希望文字大小受到影響,而只是影響每個框的寬度。 我想我也需要最小和最大縮放級別。
蘋果的garageband應用中使用了類似的東西。 任何想法如何做到這一點?
1.
-------------------------
| |
| ------ ------- -- |
| | 1 | | 2 | | 3| < 10 UIView subclass boxes on a UIScollView,
| | | | | | | with a UILabel in each UIView
| ------ ------- -- |
| |
-------------------------
2.
-------------------------
| |
| ---------- --------|
| | 1 more | | 2 | < During zoom-in pinch, boxes are stretched
| | | | | in x-axis only. Label remains same font size
| ---------- --------| and left aligned, showing more text
| |
-------------------------
(這是我連續第二次回答自己的問題,答案比原來的前提要簡單得多。我想在提出問題之前,我應該始終換個角度看。)
對於要縮放的UIView(僅x軸),我將視圖子類化並添加此方法:
- (void)setTransform:(CGAffineTransform)newValue;
{
newValue.d = 1.0;
[super setTransform:newValue];
}
當然,將UILabel添加到此UIView時會遇到問題。 標簽被拉伸。 因此,答案就是根本不將其添加到UIView中,而是直接將其添加到滾動視圖中。 然后,如果您有幾個浮點數作為屬性,分別代表標簽的原始x原點和寬度,則可以在滾動視圖縮放時使用滾動視圖的比例來計算它們:
-(void)scrollViewDidZoom:(UIScrollView *)scrollView
{
float scale = self.scrollView.zoomScale;
self.label.frame = CGRectMake(self.originalXorigin*scale, self.label.frame.origin.y, self.originalWidth*scale, self.label.frame.size.height);
}
我應該堅持數組中的這些UIView嗎?
這絕對是個人喜好或設計約束的決定。 如果必須循環更新這些視圖,或者提供某種輕松的訪問來修改其內容,那么可以,它們應該存儲在某種介質中(無論是數組還是字典供您查看)。
我想我也需要最小和最大縮放級別。
然后使用常規的舊UIPinchGestureRecognizer
。 但老實說,為您的視圖進行條件檢查的代碼並不難嗎?
蘋果的garageband應用中使用了類似的東西。 任何想法如何做到這一點?
當然,創建一個UIPinchGestureRecognizer
對象,並使用scale屬性確定一個x因子,然后將其用於CGAffineTransform()
UIView
的x縮放。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.