我的缩放UIScrollView
包含UIView
,其中包含类UIViews
的一些自定义MyRectangleView
。 ScrollView
和这些rectangleView
都会获得指向常见自定义UIViewController
,MyViewController
的指针。
是否可以渲染这些自定义视图,以便在缩放scrollView时显示增长,而不是显示缩放?
我覆盖drawRect:
,我已设法让它们更改高度,但在放大scrollView时保持宽度,方法是在scrollViewDidZoom:
中实现myViewController
并存储当前值可以从zoomScale
访问的属性中rectangleView
,然后将其宽度除以zoomScale
。
我对线宽做了同样的事情,但由于所有缩放,结果看起来非常模糊(尽管线宽在视觉上保持或多或少不变)。
有更好的方法吗?
如何将自定义UIView实现为缩放UIScrollView的子视图,该视图提供恒定的线宽并且不会模糊?
我想到的一个解决方案是使缩放视图不可见,并在scrollView上创建其他视图,从中获取它们的大小,但如果可能的话,我宁愿避免使用它。
答案 0 :(得分:4)
我已经成功使用了另一种方法。我在子类UIView中编写了一个自定义方法
-(void)resize:(CGFloat)scale {
self.transform = CGAffineTransformMakeScale(1/scale, 1/scale);
}
其中scale是UIScrollView的当前zoomScale。在父视图中调用此方法
-(void)scrollViewDidZoom:(UIScrollView *)_scrollView {
for (PushPin *pushpin in drawingPlaceholder.subviews) {
if ([pushpin isKindOfClass:[PushPin class]]) {
[pushpin resize:_scrollView.zoomScale];
}
}
}
答案 1 :(得分:1)
答案是将这些rectangleViews设置为UIScrollView的子项,而不是viewForZoomingInScrollView:
返回它们。这意味着它们将被滚动,但不会缩放。
在他们的drawRect:中,我使用scrollView的zoomScale(由VC提供)转换他们的帧。这会导致轻微的伪影,因为更改帧会触发重绘(不会触发drawRect :),但我现在愿意接受它。
这意味着我可以将它们的大小设置为放大,但是以1:1像素绘制它们,添加文本,图像等,它们仍然清晰。