gpt4 book ai didi

ipad - 触摸 CALayer 时触发 Action ?

转载 作者:可可西里 更新时间:2023-11-01 06:19:55 25 4
gpt4 key购买 nike

所以我一直在寻找,但我还没有完全找到我要找的东西。

我有一个 View ,然后是该 View 的 subview 。在第二个 View 中,我根据我给它的坐标创建了 CALayers。我希望能够触摸任何这些 CALayer 并触发某些东西。

我发现了不同的代码片段,它们看起来可以提供帮助,但我无法实现它们。

例如:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { if ([touches count] == 1) { for (UITouch *touch in touches) {

CGPoint point = [touch locationInView:[touch view]]; point = [[touch view] convertPoint:point toView:nil];

CALayer *layer = [(CALayer *)self.view.layer.presentationLayer hitTest:point];

layer = layer.modelLayer; layer.opacity = 0.5;

} } }

还有这个....

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];

// If the touch was in the placardView, bounce it back to the center
if ([touch view] == placardView) {
// Disable user interaction so subsequent touches don't interfere with animation
self.userInteractionEnabled = NO;
[self animatePlacardViewToCenter];
return;
}
}

对于这些东西,我仍然是一个初学者。我想知道是否有人可以告诉我该怎么做。感谢您的帮助。

最佳答案

CALayer 不能直接对触摸事件使用react,但程序中的许多其他对象可以 - 例如托管图层的 UIView。

事件,例如触摸屏幕时系统生成的事件,正在通过所谓的“响应链”发送。因此,当触摸屏幕时,将向位于触摸位置的 UIView 发送一条消息(换句话说 - 调用方法)。对于触摸,有三种可能的消息:touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:

如果那个 View 没有实现该方法,系统会尝试将它发送给父 View (iOS语言中的superview)。它试图发送它,直到它到达顶 View 。如果没有 View 实现该方法,它会尝试传递给当前 View Controller ,然后传递给它的父 Controller ,然后传递给应用程序对象。

这意味着您可以通过在任何这些对象中实现上述方法来对触摸事件使用react。通常托管 View 或当前 View Controller 是最佳人选。

假设您在 View 中实现它。下一个任务是找出您的哪些图层已被触摸,为此您可以使用方便的方法 convertPoint:toLayer:

例如,在 View Controller 中它可能看起来像这样:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
CGPoint p = [(UITouch*)[touches anyObject] locationInView:self.worldView];
for (CALayer *layer in self.worldView.layer.sublayers) {
if ([layer containsPoint:[self.worldView.layer convertPoint:p toLayer:layer]]) {
// do something
}
}
}

关于ipad - 触摸 CALayer 时触发 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4170288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com