Как вызвать метод только один раз во время -(void)touchesMoved?
-
19-09-2019 - |
Вопрос
Я использую - (void) touchesMoved
делать что-нибудь, когда я когда-нибудь входить конкретный кадр, в данном случае область кнопки.
Моя проблема в том, что я хочу, чтобы он что-то делал только тогда, когда я вхожу в кадр - нет когда я провожу пальцем внутри кадра.
Кто-нибудь знает, как я могу вызывать свои методы только один раз, пока я нахожусь внутри фрейма, и при этом позволять мне вызывать их еще раз, если я повторно введу их в том же TouchMove.
Спасибо.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event touchesForView:self.view] anyObject];
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(p1.frame, location))
{
//I only want the below to me called
// once while I am inside this frame
[self pP01];
[p1 setHighlighted:YES];
}else {
[p1 setHighlighted:NO];
}
}
Решение
Вы можете использовать какой-либо атрибут, чтобы проверить, был ли уже вызван код при входе в определенную область.Похоже на выделенное состояние p1
объект (не уверен, что это такое) может подойти для этого:
if(CGRectContainsPoint(p1.frame, location))
{
if (!p1.isHighlighted){ // We entered the area but have not run highlighting code yet
//I only want the below to me called
// once while I am inside this frame
[self pP01];
[p1 setHighlighted:YES];
}
}else { // We left the area - so we'll call highlighting code when we enter next time
[p1 setHighlighted:NO];
}
Другие советы
Simply add a BOOL
что вы проверяете в TouchesПеремещено и сброшено в TouchesEnded
if( CGRectContainsPoint([p1 frame],[touch locationInView:self.view])) {
NSLog (@"Touch Moved over p1");
if (!p14.isHighlighted) {
[self action: p1];
p1.highlighted = YES;
}
}else {
p1.highlighted = NO;
}
попробуйте использовать UIButton и используйте соединение «сенсорное перетаскивание» в Interface Builder.