在缩放UIScrollView子视图中保持恒定的线宽

时间:2011-05-30 10:32:17

标签: objective-c ios uiscrollview drawing zoom

我的缩放UIScrollView包含UIView,其中包含类UIViews的一些自定义MyRectangleViewScrollView和这些rectangleView都会获得指向常见自定义UIViewControllerMyViewController的指针。

是否可以渲染这些自定义视图,以便在缩放scrollView时显示增长,而不是显示缩放

我覆盖drawRect:,我已设法让它们更改高度,但在放大scrollView时保持宽度,方法是在scrollViewDidZoom:中实现myViewController并存储当前值可以从zoomScale访问的属性中rectangleView,然后将其宽度除以zoomScale

我对线宽做了同样的事情,但由于所有缩放,结果看起来非常模糊(尽管线宽在视觉上保持或多或少不变)。

有更好的方法吗?

如何将自定义UIView实现为缩放UIScrollView的子视图,该视图提供恒定的线宽并且不会模糊?

我想到的一个解决方案是使缩放视图不可见,并在scrollView上创建其他视图,从中获取它们的大小,但如果可能的话,我宁愿避免使用它。

2 个答案:

答案 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像素绘制它们,添加文本,图像等,它们仍然清晰。