ios - UIscrollView 上的绘图 View 需要无限缩放

标签 ios objective-c uiscrollview zooming

是否可以无限放大?因为我有地板绘图功能,我需要通过实现无限缩放来缩放即使是小房间也要显示得更大。如果我将原始绘图 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/

相关文章:

android - 根据设备创建将打开网站、iOS、Android 或 Win8 应用程序的 Web 链接

objective-c - 如何向 Finder 中的文件图标添加按钮?

iphone - ScrollView 不起作用 IOS 7

python - 我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块

iphone - ios @try @catch 从 @catch 返回时阻止 EXC_BAD_ACCESS

ios - __block 变量改变值

ios - 从另一个文件访问方法时,scrollView setContentOffset 崩溃

ios - 即使在添加 setcontentsize 后,UIScrollview 也无法正常工作

ios - 将 rootViewController 动画更改为 SplitViewController?

ios - 即使使用 GCD,UI 仍然延迟