是否可以无限放大?因为我有地板绘图功能,我需要通过实现无限缩放来缩放即使是小房间也要显示得更大。如果我将原始绘图 View 缩放超过 15 倍,则绘图会消失并且不显示任何内容。
如有任何建议,我们将不胜感激!
这是我的示例代码块:
self.scrView.maximumZoomScale=200;
self.scrView.minimumZoomScale=0.5;
#pragma mark ScrollView Deleagte
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.objDrawingView;
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
[self.objDrawingView.layer setContentsScale:self.objDrawingView.transform.a*[[UIScreen mainScreen] scale]];
[self.objDrawingView setNeedsDisplay];
}
最佳答案
如果您在 drawRect
中自己绘制,听起来性能更好(当然是因为您的“忽略伪图层”消息),拥有一些包含比例和抵消,并在您的绘图代码中遵守这一点。这样图层的大小将始终保持不变,如果大部分图层都在显示范围之外,则无需绘制那个巨大的图层。
当然它不应该是 scrollView 的子级,因此您还需要从 scrollViewDidScroll
获取值以计算当前可见的矩形。
想法的例子:
如果 drawRect
中的当前代码看起来像
CGContextFillRect( CGRectMake(x,y,width,height) );
并且您通过缩放整个层来缩放它,我建议有一个包含当前比例的变量并且不要缩放整个层,例如:
CGContextFillRect( CGRectMake(x* _zoomScale,y* _zoomScale,width* _zoomScale,height* _zoomScale) );
或者甚至更好地使用 CGContext
上的缩放和平移方法,那么您的绘图代码将独立于这些。 drawRect
中的前三行应该是:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, -_contentOffset.x, -_contentOffset.y);
CGContextScaleCTM(context, _zoomScale, _zoomScale);
将 zoomScale 和 contentOffset 设为属性并在 UIScrollViewDelegate
方法中设置。
关于ios - UIscrollView 上的绘图 View 需要无限缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24693759/