Как сделать так, чтобы touchMoved управлял только одним видом? - PullRequest
1 голос
/ 17 июля 2011

Я создаю UIB-кнопку на виде и хочу, чтобы штрихи-движения двигали только UIB-кнопку, а не весь вид

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint touchMoved = [touch locationInView:self.view];
}

я хочу сделать так если я касаюсь UIButton, а затем UIButton можно перемещать пальцем, если я касаюсь другого вида и мой палец движется по экрану, UIButton ничего не делает. это означает, что функция touchSMoved имеет только роль UIButton, так как я могу это сделать? спасибо

1 Ответ

5 голосов
/ 17 июля 2011

Я предполагаю, что код, который вы показываете, происходит в вашем подклассе контроллера пользовательского представления, а UIButton является подвидом его представления.

Определите простой BOOL в вашем классе, который вы установили для NO первый.Затем обновите его в методах обработки событий.

// .h
BOOL buttonTouched;

// .m
// in the viewDidLoad
buttonTouched = NO;

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // test wether the button is touched
    UITouch *touch = [touches anyObject];
    CGPoint touchBegan = [touch locationInView:self.view];
    if(CGRectContainsPoint(theButton.frame, touchBegan) {
        buttonTouched = YES;
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if(buttonTouched) {
        // do it here
        UITouch *touch = [touches anyObject];
        CGPoint touchMoved = [touch locationInView:self.view];
        CGRect newFrame = CGRectMake(touchMoved.x,
                                     touchMoved.y,
                                     theButton.frame.width,
                                     theButton.frame.height);
        theButton.frame = newFrame;
    }
}

// when the event ends, put the BOOL back to NO
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    buttonTouched = NO;
}
...