ios - 确定在 View 中绘制的线是否被点击的最佳方法是什么?

标签 ios objective-c

我有一个 View ,其中有几条线在不同方向上绘制。我需要确定用户点击了哪条线路,然后做出相应的响应。

我脑子里有几个不同的想法,但我想要最好、最有效的方法来做到这一点......

最终,对我来说最有意义的是将每一行放在单独的 View 中,并像单独的对象一样对待。如果我这样做了,我是否需要将 View 定位并旋转到该线的确切位置,以便我知道何时点击它?如果不是,我会假设 View 将相互重叠,我将无法确定点击了哪条线。

我希望我说得通。请让我知道实现这一目标的最佳方法。谢谢!

最佳答案

对我来说,解决这个问题的最佳方法是将 UIView 创建为线条。如果它们只是带有纯色的线条,只需使用背景 View 并相应地设置 CGRectFrame 。

为了在不处理位置等的情况下对触摸事件使用react,请在 UIView 的 init 方法中创建一个 touchEvent,如下所示:

UITapGestureRecognizer *onTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(lineClicked)];
 [self addGestureRecognizer:onTap];   

在 UIView 类中声明函数:
-(void)lineClicked {
  //You can check some @property here to know what line was clicked for example
  if (self.color == [UIColor blackColor])
      //do something
  else
      //do another thing

  // You can use a custom protocol to tell the ViewController that a click happened
  (**) if ([self.delegate respondsToSelector:@selector(lineWasClicked:)]) {
         [self.delegate lineWasClicked:self];
     }
}

(**) 单击该行后,您可能希望将一些逻辑放入您的 viewController 中。解决此问题的最佳方法是在 CustomUIView.h 文件中声明 @protocol 并将 self 作为参数传递,以便 viewController 知道谁被点击:
@protocol LineClikedDelegate <NSObject>
@optional
- (void)lineWasClicked:(UIView *)line; //fired when clicking in the line
@end

最后,在 CustomUIView 中创建一个 @property 来指向委托(delegate):
@property id<DisclosureDelegate> delegate;

在 ViewController 中。当您将行创建为 UIViews 时,将委托(delegate)设置为:
blackLine.delegate = self.

实现方法- (void)lineWasClicked:(UIView *)line;在 ViewController 中,你已经设置好了。

关于ios - 确定在 View 中绘制的线是否被点击的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482274/

相关文章:

ios - 将 shinobi 图表打印成 PDF

ios - 如何在 iPhone 5 上获取 IMEI

iphone - 分组的tableViewCell-设置分组的表格单元格的背景后没有圆角

ios - 按对象数组过滤 searchController

ios - Alamofire HTTPS 请求不适用于该网站

ios - 为什么 UILabel 上的首行缩进不适用于自定义字体?

Objective-C:在按下另一个键时检测 "shift"按键

ios - 将图像转换为 CGImage 时丢失图像方向

iOS 访问字典

ios - 如何获取 PHAsset 的文件大小?