- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 iOS 6.1 上为 iPad 开发一个应用程序。我的 CALayer
和 TapGestureRecognizer
有问题。
我有 7 个 CALayers 形成彩虹(每一层都是一种颜色)。每个层都是使用从 CGMutablePathRef
生成的 CAShapeLayer
构建的。一切正常。所有图层都绘制在屏幕上,我可以看到美丽的彩虹。
现在我想检测单一颜色/图层上方的点击。我尝试这样:
- (void)tap:(UITapGestureRecognizer*)recognizer
{
//I've had the tapGestureRecognizer to rainbowView (that is an UIView) in viewDidLoad
CGLayer* tappedLayer = [rainbowView.layer.presentationlayer hitTest:[recognizer locationInView:rainbowView];
if (tappedLayer == purpleLayer) //for example
NSLog(@"PURPLE!");
}
我不明白为什么这段代码不起作用!我已经在这里红色了其他主题:所有主题都建议使用 hitTest:
方法来解决此类问题。但就我而言,我无法获得想要的结果。谁能帮我?谢谢!!
编辑:
以下是创建路径和图层的代码:
- (void)viewDidLoad
{
//Other layers
...
...
//Purple Arc
purplePath = CGPathCreateMutable();
CGPathMoveToPoint(purplePath, NULL, 150, 400);
CGPathAddCurveToPoint(purplePath, NULL, 150, 162, 550, 162, 550, 400);
purpletrack = [CAShapeLayer layer];
purpletrack.path = purplePath;
purpletrack.strokeColor = [UIColor colorWithRed:134.0/255.0f green:50.0/255.0f blue:140.0/255.0f alpha:1.0].CGColor;
purpletrack.fillColor = nil;
purpletrack.lineWidth = 25.0;
[rainbowView.layer insertSublayer:purpletrack above:bluetrack];
}
这是我解决这个问题的第一个方法。而且触摸不起作用。
我还尝试创建一个 RainbowView
类,其中使用 UIBezierPaths
在 drawRect
方法中绘制彩虹。然后我按照http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/BezierPaths/BezierPaths.html中的“在路径上进行命中检测”部分进行操作。在本例中,问题在于传递给方法的路径变量。我尝试将传递的 UIBezierPath
与 RainbowView
中的路径进行比较,但没有结果。
我可以尝试创建曲线而不是路径。在这种情况下,图形可能没有填充部分,并且触摸区域仅限于笔画。但是我怎样才能识别曲线上的触摸呢?
我对所有这些东西都很困惑! :D
最佳答案
您面临的问题是,您在 HitTest 时再次检查图层的框架/边界,而不是检查形状图层的路径。
如果您的路径已满,您应该使用 CGPathContainsPoint()
以确定水龙头是否在路径内。如果您的路径没有被填充而是被抚平,我建议您引用 Ole Begemann's article about CGPath Hit Testing .
为了使代码更简洁,您可以在自己的子类中进行 HitTest 。另外,除非该层在 HitTest 时具有动画效果,否则使用presentationLayer 是没有意义的。
关于iOS CALayer 和 TapGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673657/
当我点击第一个 ViewController 中的 UIImageView 时,我正在调用另一个类中的函数: let tapGestureRecognizer = UITapGestureRecogn
所以我有一个自定义 View ,我在 View Controller 的 for 循环中创建了许多 View 。在创建它们时,我对每个它们调用此方法: -(void)setUpStuff{ /
您好,我没有卡片可以用来解决这个问题。我们开始吧。 我有这五个 imageview,这是第一个 imageview 的声明,但基本上它们有相同的声明 @IBOutlet weak var first
嗨,在 viewDidLoad 的主 WiewController 中,我设置了一个 UIGestureRecognizer *recognizer = [[UITapGestureRecognize
我有一个问题。我创建了一个示例项目来解决它,但没有成功。我创建了一个负边距的按钮,位于导航栏的中间。水龙头仅适用于下部。 MainPage.xaml:
我正在 iOS 6.1 上为 iPad 开发一个应用程序。我的 CALayer 和 TapGestureRecognizer 有问题。 我有 7 个 CALayers 形成彩虹(每一层都是一种颜色)。
在我的应用程序中,我有一张图片和一个 UITextView . 我创建了一个 UITapGestureRecognizer对于这两种 View ,但问题是无论我在屏幕上单击什么位置,只有与 UITex
我对 UITableViewCell 进行了子类化。我尝试添加手势识别器,但点击它时没有任何反应。 class MessagesTableViewCell: UITableViewCell {
谁能帮我解决这个错误?不确定它要求什么... TapGestureRecognizer Syntax override func viewDidLoad() { super.viewD
我正在尝试使用 Firebase 构建一个聊天应用程序。我正在尝试实现点击手势,以便在键盘打开时关闭键盘。不幸的是,当您点击屏幕时没有任何反应。我尝试了不同的东西,结果相同。如果有人知道它不起作用的原
这段代码的目的是将 UIView 动画到屏幕上的某个位置。不幸的是,它根本没有注册水龙头。我是否应该将委托(delegate)设置为我的设置中的某些内容?任何帮助将不胜感激! public class
我已经设置了一个点击手势识别器并将识别器添加到 uibutton。该按钮有一个背景图像。当我点击按钮时,它根本不突出显示,我唯一能做的就是更改它的 alpha 值。 UITapGestureReco
我想添加一个 *UITapGestureRecognize*r 到我的 UITextView,因为我想关闭 TextView 所在的“弹出窗口”。所以我想要,当点击 T*extView* 时,将调用
我正在尝试实现 TapGestureRecognizer,它将在 ViewModel (xaml.cs) 中调用,而不是在 View 类中...... 这是 xaml 文件中的示例代码:(IrrigN
我有一个 XF 应用程序,其中定义了以下 Collection View 。第二个标签有一个 TapGestureRecognizer,当我点击标签(在 Android 上尝试这个)时,它不会在模型中
我有一个 XF 应用程序,其中定义了以下 Collection View 。第二个标签有一个 TapGestureRecognizer,当我点击标签(在 Android 上尝试这个)时,它不会在模型中
所以我有一个像照片库一样的应用程序,我正在实现用户删除图像的能力。这是设置:我有 9 个 UIImageView、imageView、imageView2 等。我还有一个“编辑”按钮和一个 tapGe
我正在 swift 3.0 中开发一个项目,我有 UIViewController 来填充一些文本字段。因此,我使用 TableView 作为下拉菜单,一旦选择一行,它将被分配给 UILabel。此外
我正在 swift 3.0 中开发一个项目,我有 UIViewController 来填充一些文本字段。因此,我使用 TableView 作为下拉菜单,一旦选择一行,它将被分配给 UILabel。此外
我有一个 UIToolbarButton,它有一个 UIButton 来保存图像。现在,当我点击这个 UIToolbarButton 时,我想在当前 View 中打开另一个 View 。 我的代码:
我是一名优秀的程序员,十分优秀!