如果你对问题有更具体的了解,我可以对答案进行更具体的说明.:-)
我所知道的并不存在这样的东西,但创造并不是非常困难.做出的决定是"谁处理绘制调整大小手柄和调整大小/拖动逻辑?"
意见处理他们自己
如果用户可调整大小的视图处理绘制夹点并响应调整大小/拖动操作本身,则必须选择是否要在视图内容上方或"在外部"绘制手柄.如果您希望把手"在外面",则"可用区域"会减少,因为您的内容必须足够插入,以便为绘制调整大小控件留出空间,这会使绘图和大小调整指标复杂化.如果您在内容上"抓取"手柄,则可以避免此问题.
容器视图处理所有子视图
另一种方法是创建一个"可调整大小的视图容器视图",它可以在任何子视图的周边绘制调整大小的夹点,并在它(容器)在其中一个夹点上接收拖动事件时通过"查看子视图"来处理拖动/调整大小逻辑区域.在这里放置逻辑允许任何类型的子视图可拖动/可调整大小,并且为您提供额外的好处,即只有一个稍重的权重视图的实例(相对于其中具有更复杂逻辑的子视图的许多实例).
基本机制
一旦你决定了,那真的只是创建你的子视图,绘图,管理NSTrackingArea实例(对于抓地区域),并响应适当的鼠标方法(向下,移动等).在每个子视图处理自己的子视图的情况下,他们将管理他们自己的跟踪区域,抓握绘图和鼠标移动,设置他们自己的框架作为响应.在容器视图为其子视图处理所有这些的情况下,它将管理所有子视图的跟踪区域并在其自身上绘制它们的夹点,并设置目标子视图的框架(并且子视图对整个事物一无所知).
我希望这有助于您至少了解可能的机制.如果我不是刚起床并开始上午咖啡,我可能会更简洁地写出来,但是你有它.:-)
编辑7年后
因为没有太多关于OP想要的细节,我给出了一个非常通用的答案,但我应该提出几点:
NSSplitView如果它可以为你工作(即,如果视图彼此对齐并划分公共容器视图的空间).拆分视图可让您自定义夹点区域等,并免费为子视图执行所有操作.NSViewController等等),请尝试混合方法(使用图层显示非选定视图的缓存图像并仅添加完整,所选项目的交互式大小子视图(或项目的子视图).CALayers.这种利用图形加速,是远远高于一堆(非常耗费大量资源的)更高效的NSView子视图.所有移动/大小/选择逻辑都由"画布视图"处理,唯一的子视图可能是重叠控件(尽管如果您的Canvas本身需要包含在滚动视图中,最好使用NSScrollView为此目的允许固定叠加视图的机器).总之,答案是不完整的,也有点过时,所以我觉得我最初的建议并不像现在这样好.
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |