Я погружаюсь в разработку iOS и играю с сенсорными событиями. У меня есть класс с именем UIPuzzlePiece
, который является подклассом UIImageView
и представляет объекты головоломки, которые вы можете перемещать по экрану. Моя цель - иметь возможность перемещать кусочки головоломки по экрану пальцем.
В настоящее время у меня есть события touchesBegan и touchesMoved, реализованные в классе UIPuzzlePiece
...
// Handles the start of a touch
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event touchesForView:self] anyObject];
CGPoint cgLocation = [touch locationInView:self];
[self setCenter:cgLocation];
}
// Handles the continuation of a touch.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event touchesForView:self] anyObject];
CGPoint cgLocation = [touch locationInView:self];
[self setCenter:cgLocation];
}
Проблема, с которой я сталкиваюсь, заключается в том, что возвращаемое местоположение CGPoint представляет местоположение в представлении UIPuzzlePiece, что имеет смысл, но мне нужно знать местоположение касания внутри родительского представления. Таким образом, оператор [self setCenter:cgLocation]
фактически переместит UIPuzzlePiece в место касания. Я всегда могу написать какой-нибудь хакерский алгоритм для его преобразования, но я надеялся, что есть лучший или более простой способ достижения моей цели. Если бы у меня была только одна часть головоломки, я бы просто реализовал код сенсорного события в контроллере представления родительского представления, но у меня есть много частей головоломки, поэтому я обрабатываю его в представлении UIPuzzlePiece.
Ваши мысли?
Большое спасибо за вашу мудрость!