【问题标题】:Drawing line on a CALayer in OSx在 OSx 中的 CALayer 上画线
【发布时间】:2013-07-24 09:26:53
【问题描述】:

我想知道你是否可以帮助我在图层上绘画。

情况是这样的

我在这种屏幕上编程http://multitouch.com,12 次同时触摸。 在我正在开发的应用程序中,我可以管理多个图像。我可以同时旋转、缩放所有图像(屏幕上最多 12 次触摸!) 为此,我只使用图层进行表演。 每个图像都由一个 CALayer 表示,然后我创建我的 CALayer 并将图像设置为其“内容”。层次结构是这样的。

我只有一个 NSView。

  • NSView "Container_View"
  • CALayer“Images_Layer”作为“Container_View”层的子层(它们具有相同的框架)
  • CALayer“Img_1_Layer”、CALayer“Img_2_Layer”、CALayer“Img_3_Layer”等作为“Images_Layer”的子层

正如我之前告诉你的,我可以旋转、缩放和移动我的图像。

双击单个图像,我锁定了整个屏幕,我仍然可以旋转和移动图像,但只能用两根手指。

现在我希望该用户可以用一根手指在此图像上绘图。

主要问题是我没有图形经验,互联网上的所有示例都是关于在视图上画线。

问题是如何用手指在 CALayer 上绘图。我只有 CALayer,我不能有 NSView

非常感谢,塞尔吉奥


您好 Mazyod,提供 Image 的 CALayer 类非常大。

请尝试理解此上下文

MainWindow 自然是 root

NSViewController 调用 MainViewController 自定义 NSView 作为根视图 - 这个视图被称为 Container 并且它被设置为 MainWindow 的 contentView

CALayer 称为 Images_Layer - 它是作为容器层的子层添加的层

CALayer 称为 Img_Layer - 它是作为 Images_Layer 的 SubLayer 添加的层(我为每个图像设置了一个,自然设置为内容,然后是 CGImageRef)

当我单击图像 (ImgLayer) 时,会像往常一样触发 3 个方法:

onTouchPointDown - 带有 x、y 等 onTouchPointMove - 使用 x、y 等 onTouchPointUp - 带有 x、y 等

【问题讨论】:

  • 你说你的兴趣是在 OS X 上。那么你说的是用手指画一个图形还是一条线?点击图片?你说的对我来说意义不大。
  • 对不起我的英语,我想解释一下我的应用程序是如何工作的。是的,我想用一根手指在包含图像作为其“内容”的 CALayer 上绘制。假设我有 3 种方法的 CustomLayerImage:TouchBegan TouchMove TouchEnd
  • 我建议你展示一些你目前拥有的代码,这样我们就可以从那里开始了。仅供参考,在 CALayer 上绘图与在视图上绘图完全相同,只有一个区别:您可以使用 drawInContext: 而不是使用 drawRect: 进行绘图
  • 嗨 Mazyod,我编辑了我的问题,请阅读以上内容
  • 场景是这样的,youtube.com/watch?v=l0-dWFZglfs 从 1.25 分钟开始,我可以做到完全一样。就我而言,所有图像都是CALayer。现在,想象一下,如果我双击单个图像,除该图像之外的所有屏幕都会被锁定。一个自定义栏显示在图像附近,用户可以在其中选择颜色并在图像上绘图。

标签: objective-c macos drawing calayer paint


【解决方案1】:

好的,我找到了。

  • 设置图层的委托
  • 在委托中重写此方法
  • 需要的时候调用图层的setNeedDisplay方法

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx

{

NSGraphicsContext *gc = [NSGraphicsContext graphicsContextWithGraphicsPort:ctx flipped:NO];
[NSGraphicsContext saveGraphicsState];

[NSGraphicsContext setCurrentContext:gc];

// draw points with bezier path

[NSGraphicsContext restoreGraphicsState];

}

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多