【问题标题】:Pinch zooming a UIScrollView on the x-axis only仅在 x 轴上捏缩放 UIScrollView
【发布时间】:2012-06-17 19:42:40
【问题描述】:

我希望能够在 UIScrollView 上捏缩放,以便子视图仅在 x 轴上展开/收缩。

我创建了一个 UIScrollView,并使用 addSubview 添加 UIViews。每个 UIView 中都有一个 UILabel 。我应该在数组中保留这些 UIView 吗?

当我缩放时,我不想影响文本大小,只影响每个框的宽度。我想我也需要最小和最大缩放级别。

Apple 的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
|                       |
-------------------------

【问题讨论】:

  • 到目前为止你有什么尝试?实现 UIGesture 识别器,并在操作中实现subView 中的更改并调用setNeedsDisplay

标签: objective-c ios uiscrollview uigesturerecognizer uipinchgesturerecognizer


【解决方案1】:

(连续第二次,我用一个比原来的前提简单得多的答案来回答我自己的 Q。我想我应该在提问之前总是从另一个角度看..)​​

对于我想要缩放的 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);
}

【讨论】:

  • 我很高兴您回答了自己的问题。这是一个非常巧妙的解决方案。谢谢!
【解决方案2】:

我应该在数组中保留这些 UIView 吗?

这绝对是个人喜好或设计约束决定。如果您必须在循环中更新这些视图,或者提供某种简单的访问来修改它们的内容,那么是的,它们应该存储在某种介质中(是数组还是字典,由您确定)。

我想我也需要最小和最大缩放级别。

那么你运气不好,然后是一个普通的旧UIPinchGestureRecognizer。但老实说,在条件检查中对您的视图进行编码并不难?

Apple 的garageband 应用程序中使用了类似的东西。知道怎么做吗?

当然,创建一个UIPinchGestureRecognizer 对象并使用scale 属性确定一个x 因子,然后将其用于CGAffineTransform() UIView 的x 比例。

【讨论】:

  • 当我没有看到任何编写代码的尝试时,您现在可以看到答案是多么模糊!
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 2017-09-23
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
相关资源
最近更新 更多