我希望能够在UIScrollView上进行缩放,以便子视图仅在x轴上展开/收缩。
我创建一个UIScrollView,并使用addSubview添加UIViews。每个UIView都有一个UILabel。我应该坚持使用数组中的这些UIViews吗?
当我缩放时,我不希望文本大小受到影响,只是每个框的宽度。我想我也需要最小和最大缩放级别。
Apple的车库应用程序中使用了类似的东西。知道怎么做吗?
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
| |
-------------------------
答案 0 :(得分:3)
(连续第二次,我回答了我自己的问答,答案比原来的前提要简单得多。我想在问问题之前我应该总是从另一个角度看。)
对于我想要缩放的UIView(仅限x轴),我将视图子类化并添加此方法:
- (void)setTransform:(CGAffineTransform)newValue;
{
newValue.d = 1.0;
[super setTransform:newValue];
}
当然,我在这个UIView中添加了UILabel的问题。标签被拉长了。所以答案就是不要将它添加到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);
}
答案 1 :(得分:1)
我是否应该坚持使用数组中的这些UIViews?
这绝对是个人偏好或设计约束决定。如果你必须在循环中更新这些视图,或者提供某种方便的访问来修改它们的内容,那么是的,它们应该存储在某种介质中(无论是数组还是字典都是你要弄清楚的)。
我想我也需要最小和最大缩放级别。
那么你和常规的UIPinchGestureRecognizer
一起运气不好。但老实说,对你的观点的矩形进行条件检查并不难吗?
Apple的车库应用程序中使用了类似的东西。知道怎么做吗?
当然,制作一个UIPinchGestureRecognizer
对象,然后使用scale属性确定一个x因子,然后使用该因子CGAffineTransform()
UIView
的x比例。