【问题标题】:Clickable CALayer UIs可点击的 CALayer UI
【发布时间】:2010-11-18 06:01:48
【问题描述】:

我有一个类似coverflow 的图像轮播,可以通过iPhoto 脚本桥抓取照片。我将视图设置为接受第一响应者并实现了左右箭头的方法,但从概念上讲,我无法弄清楚如何使图层可点击。我知道接受鼠标按下事件是包含视图的工作,但我无法将这些碎片放在一起。

一般来说,我是否应该尝试将 CALayers 制作成 UI 对象,如按钮等?因为他们在其他方面非常灵活,我喜欢和他们一起工作。

谢谢!

【问题讨论】:

    标签: cocoa core-animation calayer


    【解决方案1】:

    好的,这就是我拼凑的。上下文是我有一个带有一个子层(CATextLayer)的自定义视图,我用内置的布局管理器进行了约束。这是 CustomView.m 中的 awakeFromNib

    - (void) awakeFromNib {
    
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [CGColorHolder black];
    layer.layoutManager = [CAConstraintLayoutManager layoutManager];
    [self setLayer:layer];
    [self setWantsLayer:YES];
    
    CATextLayer *textLayer = [CATextLayer layer];
    textLayer.string = @"TextLater";
    textLayer.name = @"textLayer";
    textLayer.fontSize = 42.0f;
    textLayer.alignmentMode = kCAAlignmentCenter;
    [textLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMidX relativeTo:@"superlayer" attribute:kCAConstraintMidX offset:0.0f]];
    [textLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY offset:-50.0f]];
    
    }
    

    然后我覆盖自定义视图的 mouseDown 方法。使用 -hitTest,我返回包含鼠标按下发生点的图层,然后设置图层的某些属性以显示它被击中。

    - (void)mouseDown:(NSEvent *)theEvent {   
    
    CALayer *layer = [self.layer hitTest:NSPointToCGPoint([theEvent locationInWindow])];
    layer.backgroundColor = [CGColorHolder red];
    

    }

    此外,您必须确保包含的窗口接受 mouseMoved 事件:

    [window acceptsMouseMovedEvents];
    

    我不知道在真正复杂的 UI 方面这会让我走多远。从这里开始,我可能会根据返回的名称将要执行的操作委托给返回的层。但这可能会很快变得丑陋,所以即使我在这里回答了我自己的问题,我真的很想从真正知道自己在做什么的人那里得到一些意见! :D 谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多