簡體   English   中英

捏僅在x軸上縮放UIScrollView

[英]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.

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