Ios 使用NS[UI]ScrollView操作投影 我有一个简单的金属设置,在代码 MTKVIEW中间绘制图像。我希望我可以像在滚动视图中一样添加收缩缩放和其他功能,这样我就可以缩放图像并使用一些阈值来移动它

Ios 使用NS[UI]ScrollView操作投影 我有一个简单的金属设置,在代码 MTKVIEW中间绘制图像。我希望我可以像在滚动视图中一样添加收缩缩放和其他功能,这样我就可以缩放图像并使用一些阈值来移动它,ios,objective-c,swift,cocoa,uikit,Ios,Objective C,Swift,Cocoa,Uikit,我也不想自己实现它,因为我的应用程序将同时在Mac OS和iOS上运行,这是需要支持和编写的代码的两倍 有没有一种方法可以使用默认的滚动视图控件来操纵投影?我的意思是在我的视图上设置滚动视图,并以代理方式或其他方式获取一些数据 任何帮助都将不胜感激 您可能需要尝试Metal2DScrollable示例代码。其想法是: 将MTKView放在UIScrollView后面(不是子视图) 将虚拟内容视图作为UIScrollView的子视图放置 使虚拟内容视图成为缩放的目标 正确设置UIScrollVie

我也不想自己实现它,因为我的应用程序将同时在Mac OS和iOS上运行,这是需要支持和编写的代码的两倍

有没有一种方法可以使用默认的滚动视图控件来操纵投影?我的意思是在我的视图上设置滚动视图,并以代理方式或其他方式获取一些数据


任何帮助都将不胜感激

您可能需要尝试
Metal2DScrollable
示例代码。其想法是:

  • 将MTKView放在UIScrollView后面(不是子视图)
  • 将虚拟内容视图作为UIScrollView的子视图放置
  • 使虚拟内容视图成为缩放的目标
  • 正确设置UIScrollView,如contentSize、contentInset等
  • 使UIScrollView和虚拟内容视图都透明
  • 从虚拟内容视图的边界->MTKView的坐标->设备坐标计算变换
  • 使用金属渲染时应用该变换
  • 因此,MTKView不在UIScrollView中,但这欺骗了用户的眼睛


    同样的技术可能适用于macOS,但我没有尝试过。

    这不完全是一个解决方案,但我认为问题的答案是“不可能”,这就是我接受问题的原因。注意,有一点没有考虑到,如果您的滚动视图具有最小ZoomScale和最大ZoomScale,然后,将视图滚动回最小/最大比例的反弹动画将不会在金属视图中设置动画,因为它是一个动画。我发现解决这个问题的唯一方法是禁用bouncesZoom