2011-04-26 4 views
0

в моем приложении, я пытаюсь переместить subview, который я всплываю. Это я использую с помощью функций UIPanGestureRecognizer и распознавания жестов, предоставляемых apple in this linkПроблема UIPanGestureRecognizer в iPad

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

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

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

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; 
} 

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

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

ответ

0

Я решил проблему ... очевидно, используя кнопку для выполнения необходимых действий, мне действительно потребуется, чтобы я дважды щелкнул по ней, а затем выполнил действие панорамирования. Поэтому я удалил его и добавил к нему Image и добавил распознаватель жестов.

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

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

// 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]; 

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

Смежные вопросы