2014-11-11 2 views
0

У меня есть что-то похожее на клавиатуру (один главный вид, девять подзонов). прикосновение начала/вниз может начаться в любом из девяти подзонов. я обнаруживаю прикосновение вниз/начал, чтобы узнать, когда пользователь перетаскивает свой палец в другие подвид (в котором просматривается палец), и когда пользователь поднимает палец вверх/вверх/вниз.Объектив c: обнаружение касания началось/вниз, когда касание началось снаружи изображения/изображение/кнопка

(переполнение стека, не позволяющее публиковать этот вопрос, я попробую вставить код из раздела ответов, посмотрите, работает ли это).

// in IB set long press gesture min duration to 0.1 
-(IBAction)handleLongPressOnVoices:(UILongPressGestureRecognizer *)gestureRecognizer 
    { 
     CGPoint location = [gestureRecognizer locationInView:gestureRecognizer.view]; 

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ 
     [self whichVoiceSelected:location]; 
    } else if(gestureRecognizer.state == UIGestureRecognizerStateChanged){ 
     [self whichVoiceSelected:location]; 
    } else if(gestureRecognizer.state == UIGestureRecognizerStateEnded){ 
     [self.avPlayer stop]; 
    } 
} 

- (Недействительными) whichVoiceSelected: (CGPoint) расположение {

int updatedSelectedVoiceNumber; 

if(CGRectContainsPoint(self.voice0.frame, location)){ 
    updatedSelectedVoiceNumber=0; 
    self.statusLabelOutlet.text = @"..."; 
}else if(CGRectContainsPoint(self.voice1.frame, location)){ 
    updatedSelectedVoiceNumber=1; 
    self.statusLabelOutlet.text = @"..."; 
}else if(CGRectContainsPoint(self.voice2.frame, location)){ 
    updatedSelectedVoiceNumber=2; 
    self.statusLabelOutlet.text = @"..."; 
} ... 

... }

ответ

1

я нашел части ответа на многие ответы StackOverflow. я вставляю свой подход к решению этого вопроса (а), чтобы помочь следующему человеку и (б) в качестве приглашения для более эффективных решений.

// in IB set long press gesture min duration to 0.1 
-(IBAction)handleLongPressOnVoices:(UILongPressGestureRecognizer *)gestureRecognizer 
    { 
     CGPoint location = [gestureRecognizer locationInView:gestureRecognizer.view]; 

     if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ 
      [self whichVoiceSelected:location]; 
     } else if(gestureRecognizer.state == UIGestureRecognizerStateChanged){ 
      [self whichVoiceSelected:location]; 
     } else if(gestureRecognizer.state == UIGestureRecognizerStateEnded){ 
      [self.avPlayer stop]; 
     } 
    } 

-(void)whichVoiceSelected:(CGPoint)location { 

    int updatedSelectedVoiceNumber; 

    if(CGRectContainsPoint(self.voice0.frame, location)){ 
     updatedSelectedVoiceNumber=0; 
     self.statusLabelOutlet.text = @"..."; 
    }else if(CGRectContainsPoint(self.voice1.frame, location)){ 
     updatedSelectedVoiceNumber=1; 
     self.statusLabelOutlet.text = @"..."; 
    }else if(CGRectContainsPoint(self.voice2.frame, location)){ 
     updatedSelectedVoiceNumber=2; 
     self.statusLabelOutlet.text = @"..."; 
    } ... 
... 
} 
Смежные вопросы