放大UIScrollView子视图时保持恒定的线宽

问题描述

| 我有一个缩放
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像素绘制它们,添加文本,图像等,并且它们保持清晰。