2010-02-16 2 views
2

Как я могу добавить события жестов к uipickerview для изменения вкладок? Я должен создать пользовательский класс, однако, я не знаю, как обращаться с uipickerview. У меня есть жесты, присутствующие в uiviews, чтобы сделать это, но у меня проблемы с uipickerview.iPhone UIPickerView Жесты

Мой код для просмотров:

#define HORIZ_SWIPE_DRAG_MIN 100 
CGPoint mystartTouchPosition; 
BOOL isProcessingListMove; 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint newTouchPosition = [touch locationInView:self.view]; 
    if(mystartTouchPosition.x != newTouchPosition.x || mystartTouchPosition.y != newTouchPosition.y) { 
     isProcessingListMove = NO; 
    } 
    mystartTouchPosition = [touch locationInView:self.view]; 
    [super touchesBegan:touches withEvent:event]; 
} 

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

    // If the swipe tracks correctly. 
    double diffx = mystartTouchPosition.x - currentTouchPosition.x + 0.1; // adding 0.1 to avoid division by zero 
    double diffy = mystartTouchPosition.y - currentTouchPosition.y + 0.1; // adding 0.1 to avoid division by zero 

    if(abs(diffx/diffy) > 2.5 && abs(diffx) > HORIZ_SWIPE_DRAG_MIN) 
    { 
     // It appears to be a swipe. 
     if(isProcessingListMove) { 
      // ignore move, we're currently processing the swipe 
      return; 
     } 

     if (mystartTouchPosition.x < currentTouchPosition.x) { 
      isProcessingListMove = YES; 
      self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0]; 
      return; 
     } 
     else { 
      isProcessingListMove = YES; 

      self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:2]; 

      return; 
     } 
    } 
    else if(abs(diffy/diffx) > 1) 
    { 
     isProcessingListMove = YES; 
     [super touchesMoved:touches withEvent:event]; 
    } 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    isProcessingListMove = NO; 
    [super touchesEnded:touches withEvent:event]; 
} 

Спасибо за помощь.

+0

Возможно, вы захотите уточнить, что именно вы пытаетесь сделать. Вы пытаетесь переключить вкладки UITabbar tab с жестом салфетки, захваченным UIPickerView? Вы пытаетесь манипулировать самим UIPickerView, используя салфетки? – TechZen

ответ

0

Вы не можете подклассифицировать UIPickerView.

Однако, поскольку представление подбора должно отображаться в другом виде (так как оно не занимает весь экран), вы можете замаскировать штрихи в контроллере этого вида и фильтровать жесты.

(Предполагая, что я понимаю, что вы пытаетесь сделать ...) Я предупреждал бы, что прокрутка представления выбора для изменения вкладок является нестандартным интерфейсом и, вероятно, путает ваших пользователей. Так как выбор пикара воспринимается как тип управления, он будет ожидать только нормальное вращательное действие сборщика. Как бы они даже знали, чтобы прорисовать представление сборщика горизонтально?

+0

Если это правильный ответ, нажмите на галочку рядом с ним. – TechZen

+1

Вы определенно МОЖЕТ подкласс UIPickerView, и в некоторых случаях это действительно хорошая идея, но вторая половина вашего ответа не плохая. – pob21

0

Я оставил его в покое. Это было бы странно, ты прав.

-1

ZT> Вы не можете подклассифицировать UIPickerView. «Чтобы сделать просмотрщик более длинным, я подклассифицировал UIPickerView. Мой подкласс имел ровно один метод» от Longer Spinning and Blurring. Также см. UIPickerView Class Reference: «В классе UIDatePicker используется пользовательский подкласс UIPickerView для отображения дат и времени».

2

МОЖЕТ подкласс UIPickerView. Проблема состоит в том, что он состоит из девяти подзонов, один из которых, называемый UIPickerTable, получает события касания, такие как touchesBegan:withEvent:, к строкам, которые вы хотите. Я смог успешно перехватить их с кодом, включенным в конце этого сообщения: Responding to touchesBegan in UIPickerView instead of UIView

Другие ответы/комментарии также полезны. Я хотел очистить воздух, а не от того, что кто-то сделал что-то нестандартное (как в этом вопросе), но для того, кто приехал сюда, желая подкласса UIPickerView, потому что первая строка принятого ответа ошибочна.

+0

Когда я просматриваю subviews UIPickerView во время выполнения, я вижу только 3, все из которых просто говорят, что это стандартные классы UIView. – stonedauwg

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