Проблема с распознавателем UIPanGestureRecognizer в iPad

#xcode #ios4 #ipad #uigesturerecognizer #pan

#xcode #ios4 #iPad #uigesturerecognizer #панорамирование

Вопрос:

в моем приложении я пытаюсь переместить вложенный просмотр, который я всплываю. Я делаю это с помощью UIPanGestureRecognizer и функций распознавания жестов, предоставляемых Apple по этой ссылке

Итак, проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на изображение кнопки и пытаюсь переместить представление, оно не перемещает представление. Функциональность работает только тогда, когда я нажимаю кнопку, а затем нажимаю на нее и перемещаю. только тогда он перемещает представление.

Я хотел бы знать, что я делаю неправильно.

Вот код кнопки, к которой я добавляю эту функциональность

 UIButton *moveButton = [[UIButton alloc] initWithFrame:CGRectMake(5, 1, 30, 30)];
[moveButton addTarget:self         action:@selector(moveButtonClick:)forControlEvents:UIControlEventTouchDown];
[moveButton setBackgroundImage:[UIImage imageNamed: @"moveButton.png"] forState:UIControlStateNormal];
[customView addSubview:moveButton];
[moveButton release];
  

и вот код, который я использую для приложения для распознавания жеста панорамирования

 -(void) moveButtonClick: (id) sender
 {
[self addGestureRecognizersToPiece:self.view];
 }

 // shift the piece's center by the pan amount
 // reset the gesture recognizer's translation to {0, 0} after applying so the next callback  is a delta from the current position
 - (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{
UIView *piece = [gestureRecognizer view];

[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
    CGPoint translation = [gestureRecognizer translationInView:[piece superview]];

    [piece setCenter:CGPointMake([piece center].x   translation.x, [piece center].y   translation.y)];
    [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}

// adds a set of gesture recognizers to one of our piece subviews
- (void)addGestureRecognizersToPiece:(UIView *)piece
{
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panPiece:)];
[panGesture setDelegate:self];
[panGesture setMaximumNumberOfTouches:1];
[piece addGestureRecognizer:panGesture];
[panGesture release];

}


// scale and rotation transforms are applied relative to the layer's anchor point
// this method moves a gesture recognizer's view's anchor point between the user's fingers
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) 
{
    UIView *piece = gestureRecognizer.view;
    CGPoint locationInView = [gestureRecognizer locationInView:piece];
    CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];

    piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
    piece.center = locationInSuperview;
}
}

// UIMenuController requires that we can become first responder or it won't display
- (BOOL)canBecomeFirstResponder
{
return YES;
}
  

Было бы действительно здорово, если бы кто-нибудь мог мне помочь в этом.

ОБНОВЛЕНИЕ: Проблема решена. Посмотрите на ответ, приведенный ниже.

Ответ №1:

Я решил проблему … по-видимому, использование кнопки для выполнения нужного мне действия действительно потребует от меня нажать на нее дважды, а затем выполнить только действие панорамирования. Итак, я удалил ее и добавил изображение и добавил к нему распознаватель жестов.

Вот обновленный код…

Код для изображения —

 // Image which allows subview to be moved around
CGRect myImageRect = CGRectMake(5, 1, 30, 30);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
[myImage setImage:[UIImage imageNamed:@"moveButton.png"]];
myImage.opaque = YES;
myImage.userInteractionEnabled = YES;
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self        action:@selector(panPiece:)];
[panGesture setDelegate:self];
[panGesture setMaximumNumberOfTouches:1];
UIView *piece = self.view;
[piece addGestureRecognizer:panGesture];
[panGesture release];
[customView addSubview:myImage];
[myImage release];
  

После этого я удалил код кнопки и удалил распознаватель действий для кнопки.. в остальном остальной код тот же, и он работает нормально…