问题描述
|
我有一个缩放
UIScrollView
,其中包含UIView
,其中包含一些自定义UIViews
,其类别为MyRectangleView
。 ScrollView
和这些rectangleView
都获得了指向通用习俗UIViewController
,MyViewController
的指针。
是否可以渲染这些自定义视图,使它们在scrollView缩放时看起来变大,而不是缩放?
我确实重写了drawRect:
,并且设法使它们改变了高度,但是在scrollView缩放时保持了它们的宽度,方法是在myViewController
中实现scrollViewDidZoom:
并将当前的zoomScale
存储在可从rectangleView
访问的属性中,然后将它们的宽度除以zoomScale
。
我对线宽进行了相同的操作,但是由于所有缩放,结果看起来非常模糊(尽管从视觉上看,线宽或多或少保持不变)。
有一个更好的方法吗?
如何实现自定义UIView作为提供恒定线宽且不会模糊的缩放UIScrollView的子视图?
我想到的一种解决方案是使缩放视图不可见,并在scrollView顶部创建其他视图以从中获取其大小,但是,我尽可能避免这样做。
解决方法
我已经成功地使用了另一种方法。我在子类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];
}
}
}
, 答案是将这些矩形视图设置为UIScrollView的子级,而不用ѭ16NOT返回它们。这意味着它们将被滚动,但不会缩放。
在他们的drawRect:中,我用scrollView \的zoomScale(由VC提供)来变换他们的框架。这会导致轻微的伪影,因为更改框架会触发重绘(而不会触发drawRect:),但是我现在愿意忍受它。
这意味着我可以像设置缩放一样设置它们的大小,但是以1:1像素绘制它们,添加文本,图像等,并且它们保持清晰。