У меня есть вопрос, связанный с разрезанием изображения, чтобы узнать, какая часть нажата пользователем. Для некоторых это довольно простое упражнение, но я взломал голову над этим и не могу найти правильный путь.Как отрезать изображение на основе координат
То, что я хотел бы сделать, это нажать на часть тела, на этом изображении и есть устройство скажите мне, какая часть тела это:
Но у меня нет абсолютно никакого понятия о том, как программировать это.
Я думал о настройке массива контуров CGPoints для каждой части тела, но как их получить? Координаты Photoshop? А затем вычислить затронутую точку на ближайший CGPoint?
Кто-то дал мне идею разрезать изображение в разных зонах, разные изображения для каждой части тела. Но здесь проблема заключается в том, что каждое изображение представляет собой прямоугольник, из-за которого очень сложно понять, что именно было затронуто. Также понадобится массив точек, особенно для перекрывающихся изображений.
Другой человек сказал мне, что это возможно только с помощью SpriteKit.
Позвольте мне знать, умные выглядывает :)
UPDATE: Я понял это! Я делаю много массивов, которые содержат точки в руки, ноги, ... Пример:
CGPoint p1 = CGPointMake(x + 432, y + 200);
CGPoint p2 = CGPointMake(x + 523, y + 188);
CGPoint p3 = CGPointMake(x + 530, y + 277);
CGPoint p4 = CGPointMake(x + 432, y + 277);
CGPoint p5 = CGPointMake(x + 523, y + 367);
CGPoint p6 = CGPointMake(x + 432, y + 354);
CGPoint p7 = CGPointMake(x + 325, y + 355);
CGPoint p8 = CGPointMake(x + 296, y + 362);
NSArray *handL = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:p1],
[NSValue valueWithCGPoint:p2],
[NSValue valueWithCGPoint:p3],
[NSValue valueWithCGPoint:p4], nil];
[shapes addObject:@{@"name":NSLocalizedString(@"Left Hand", @""), @"points":handL}];
NSArray *handR = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:p5],
[NSValue valueWithCGPoint:p6],
[NSValue valueWithCGPoint:p7],
[NSValue valueWithCGPoint:p8], nil];
[shapes addObject:@{@"name":NSLocalizedString(@"Right Hand", @""), @"points": handR}];
Затем в я прочитал эти значения и слой их:
NSArray *shapes = [[NumbersHelper sharedNumbersHelper] getScreenThreeShapes];
for (int outside = 0; outside < [shapes count]; outside++) {
CAShapeLayer *shape = [[CAShapeLayer alloc] init];
[self.scrollView.layer addSublayer:shape];
shape.opacity = 0.5;
shape.lineWidth = 2;
shape.lineJoin = kCALineJoinRound;
NSArray *points = [[[shapes valueForKey:@"points"] allObjects] objectAtIndex:outside];
UIBezierPath *path = [[UIBezierPath alloc] init];
for (int inside = 0; inside < points.count; inside++) {
if (inside == 0) {
[path moveToPoint:[[points objectAtIndex:inside] CGPointValue]];
} else {
[path addLineToPoint:[[points objectAtIndex:inside] CGPointValue]];
}
}
[path closePath];
shape.path = [path CGPath];
shape.name = [[[shapes valueForKey:@"name"] allObjects] objectAtIndex:outside];
}
When пользователь вводит мнение, что я делаю это:
- (void)tappedOnView:(UITapGestureRecognizer *)sender
{
if ([sender locationInView:self.scrollView].x > 2048 && [sender locationInView:self.scrollView].x < 3072) {
screenTwoTouchedPoint = [sender locationInView:self.scrollView];
CGPoint touchPoint = [sender locationInView:self.scrollView];
NSString *name;
for (id sublayers in self.scrollView.layer.sublayers) {
if ([sublayers isKindOfClass:[CAShapeLayer class]]) {
CAShapeLayer *shape = sublayers;
if (CGPathContainsPoint(shape.path, 0, touchPoint, YES)) {
name = shape.name;
break;
}
}
}
[self tappedBody:sender onPart:name];
}
}
Просто из любопытства, для чего вы его используете? :) –
Посмотрите на это - http://stackoverflow.com/questions/27169845/how-to-detect-tap-on-small-nearest-buttons-in-ios/27170107#27170107 – Kampai
@ iosDev82 Ха-ха, может Не скажите, что еще, но это не для человеческого тела :) – Yoko