拖动调整 NSView(或其他对象)的大小

2024-05-27

我正在尝试构建一个应用程序,允许用户使用可以调整大小的矩形边界框来指定图像的多个区域。

到目前为止,我已经有一个NSScrollView其中包含一个NSImageView这样用户就可以放大图像并根据需要滚动。我目前的想法是我可以使用NSViews作为提供用户可以定位和调整大小以覆盖所需区域的边界框的一种方式,将NSView帧转换为图像大小的百分比,然后存储这些值以供以后使用。

有一个addAreaToImage方法添加一个NSView to the NSScrollView位于用户当前正在查看的任何位置的中心。我想要的是用户能够单击并拖动该区域的角落以调整其大小/将其移动到他们想要的任何位置。如果你愿意的话,可以说是一个实时边界框。

阅读完文档后,与拖动相关的大部分内容都是使 NSView 成为拖动其他内容(例如图像)的地方,或者由于超级视图的大小调整而调整大小,这两者都不是我想要做的。

我担心这个问题的答案(或者使我能够推出自己的解决方案的一组答案)是如此基本以至于没有人思考过它们,最近几天的谷歌搜索已经为我证实了这一点。

我来自 iOS 开发,所以这并不是一个全新的领域,但 NSView 和 UIView 似乎有足够的差异,到目前为止让我彻底困惑。


是的,您需要自己实现它,但它并不太复杂。

首先,您需要对区域视图的行为和外观做出一些决定。您是否只需要调整大小或还能够拖动(移动)视图?当它们被被动/拖动/调整大小/突出显示时,它们是如何绘制的。您想要调整大小并拖动光标吗?调整大小的行为是什么,只是拖动一个角还是所有边框?拖动边框宽度是多少?

然后,您可以对用作区域视图的 NSView 进行子类化。给它一些私有成员来指示它的状态(如 isDragged、isResized 等)。

实施drawRect:绘制视图。考虑到它的各种状态(例如,您可能希望可视化它何时被拖动或调整大小,绘制透明覆盖层等)。

接下来你要处理鼠标事件 https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html#//apple_ref/doc/uid/10000060i-CH6通过实施mouseDown:, mouseDragged:, mouseUp:有可能mouseMoved:。这里将放置您的调整大小/拖动逻辑。检查用户最初点击的位置mouseDown:并决定从设置相关状态的那一刻起可以进行哪些操作。跟进于mouseDragged:执行操作(通过相应地设置视图的框架原点和大小)。完成操作mouseUp:(验证、设置状态、调用完成逻辑、注册撤消操作)

当处理点和直角时,不要忘记坐标系 https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html#//apple_ref/doc/uid/TP40003290-CH204-BCIDJJBI。您将需要将它们转换为视图和基本系统或从视图和基本系统转换它们。 NSView 拥有为此所需的所有方法。

你需要打电话setNeedsDisplay: or setNeedsDisplayInRect:每次您希望视图重新绘制自身以反映大小和位置的变化时。

您可能还想使用追踪区域 https://developer.apple.com/library/mac/documentation/cocoa/reference/NSTrackingArea_class/Reference/Reference.html对于视图中需要不同光标的区域(例如,调整角落上的光标大小)。

拖动/调整大小时,不要忘记实现响应用户将鼠标拖出父级视图边界的逻辑。

顺便问一下,为什么要将视图添加到滚动视图中?我认为它们最好放置为图像视图(如果可能)或剪辑视图的子视图,以便它们可以滚动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拖动调整 NSView(或其他对象)的大小 的相关文章

  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • 最小的 iOS 蓝牙管理器示例

    我一直在构建一个最小的示例 用于使用 iOS 5 0 中的 BluetoothManager 私有框架来检测附近的蓝牙设备 使用此问题中找到的答案 寻找触手可及的通用蓝牙设备 https stackoverflow com question
  • 如何使用 iPhone SDK 实现可滑动的图像堆栈(例如照片应用程序)?

    我想获取一堆图像 或者可能是一组用于下载图像的 URL 并以全屏方式显示它们 一次一个 使用 iPhone SDK 使用用户滑动来平滑地为堆栈中的下一个图像设置动画 Apple 的 Photo app 似乎可以做到这一点 此外 如果尚未检索
  • 是否有适用于 iPad 2 的条码扫描仪 SDK? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Objective-C 中比较 2 个字符串

    我写了以下代码 if depSelectedIndice gt 1 comSelectedIndice gt 1 NSLog depart elemet d depSelectedIndice NSLog depart elemet d c
  • 从 UIImagePickerController 相机视图推送 viewController

    我正在开发一款消息应用程序 类似于 WhatsApp 用户可以互相发送文本和图像消息 当用户想要发送图像时 他可以从相机胶卷中选择一张图像 也可以用相机拍摄一张图像 这就是我介绍的方式UIImagePickerController对于这两种
  • 强制 Apache HTTPD 以 32 位运行

    我通过从二进制文件 以及 ppc 部分 中剥离 32 位架构 以 64 位模式运行 Apache HTTPD 我这样做是为了使其与 python 和 mysql 更加兼容 然而 我有另一台机器需要它以 32 位模式运行 它仍然保留所有四种原
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • 在 Mac 操作系统上使用 ffmpeg 录制视频

    我想在 mac OS 上使用 ffmpeg 以任何格式录制实时网络摄像头视频 我尝试了很多 但无法找到用于重新编码视频的命令 所以请任何人都可以告诉我 ffmpeg 命令用于使用 Mac 操作系统的网络摄像头捕获视频 提前致谢 对于 Mac
  • 有什么方法可以询问方法的名称吗?

    我正在尝试调试我正在开发的 iPhone 应用程序 向各种源文件添加 50 条 NSLog 语句的想法让我感到很兴奋 我想做的是写一对陈述 比如 NSString methodName self methodName NSLog metho
  • 如何按字母顺序对 UITableView 分区进行排序?

    我有一个包含 3 个类别的分段 UITableView 我正在使用这段代码 NSArray arrayOne NSArray arrayWithObjects one two three four nil NSDictionary dict
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • 无法将项目添加到 NSMutableArray ivar

    我的目标是将字符串添加到数组中 并在我调用的方法中执行此操作 在这个方法中 我在数组中得到一个空值 但不知道为什么 我在课程开始时有这样的内容 NSMutableArray listOfEvents 以及我在每个事件上调用的方法 void
  • 使用强光混合模式时突出显示伪影

    我正在 iPhone 应用程序中使用顶部图像的 HardLight 混合模式混合两个图像 它看起来像这样 UIGraphicsBeginImageContext size sourceImage drawInRect rectangle b

随机推荐