嗯,名字不好取,实在不知道应该怎么起个好名字。先讲讲需求吧,当时需要的是做一个遥控器功能的,分上,下,左,右和中。然后产品设计的是类似于以下的UI
嗯,然后开始动手,我的做法是,单独用一个imageView来写,将图放在这个imageView里,上代码:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self];
NSLog(@"point:%@",NSStringFromCGPoint(p));
// 获取p点的坐{px,py}
CGFloat px = p.x;
CGFloat py = p.y;
// 当前视图的长宽
CGFloat w = self.frame.size.width;
CGFloat h = self.frame.size.height;
// 取得 直线x1 = px 与 直线 y = h/w * px 的交点y1, 与直线 y = -(h/w) * px + h 的交点y2
CGFloat y1 = (h/w) * px;
CGFloat y2 = -(h/w) * px + h;
// 判断,因为iOS坐标系左上角为原点
if (y1 < y2) {
// 可能会在左边,下边,上边
if (py < y1) {
NSLog(@"上");
}
if (py > y2) {
NSLog(@"下");
}
if (py > y1 && py < y2) {
NSLog(@"左");
}
}
if (y1 > y2) {
// 可能会在上边,下边,右边
if (py < y2) {
NSLog(@"上");
}
if (py > y1) {
NSLog(@"下");
}
if (py > y2 && py < y1) {
NSLog(@"右");
}
}
}
其实就是一个一元一次方程,这样子上下左右就分出来了,中心的话,判断一下当前点是否在你设定的中心圆之内就OK了。