2011-02-11 5 views
0

программирования UIScrollView кажется одной из самых сложных задач для меня :((iphone) uiscrollview touch. отменить связь содержания и начать прокрутку

меня подвиды в UIScrollView.
Я хочу, чтобы позволить подвидам сначала принять сенсорное событие (и перетаскивать).
когда подвиды думают, он должен отказаться от прикосновений и прокрутка должна начаться, она должна быть в состоянии сказать так, чтобы в Scrollview.

Я экспериментировал с touchesShouldCancelInContentView, но этот метод только вызывается один раз, когда Scrollview думает, что пользователь на самом деле предназначен «прокрутки '
Мне нужно взять под контроль, когда отменить событие touch для подзапросов не зависит от реализации внутреннего uiscrollview.

Моя лучшая стратегия до сих пор является

подкласс ScrollView

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event 
{ 
    SYSLOG(LOG_DEBUG, "MyScrollView touchesBegan"); 

    if (!self.dragging && self.isSubviewTouchable) 
     [self.nextResponder touchesBegan: touches withEvent:event]; 

    [super touchesBegan: touches withEvent: event]; 
} 

и от подвид из Scrollview

когда подтаблицы необходимо освободить контакт и пусть Scrollview принимать события прикосновения так далее.

self.myScrollView.isSubviewTouchable = false; 
[self touchesEnded: touches withEvent: event]; 

и в классе делегатов scrollView я вернул значение bool.

- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    self.myScrollView.isSubviewTouchable = true; 
} 

Проблема, вызов touchesEnded из подвида фактически не освобождает сенсорное событие это кажется. (Подтаблица продолжает получать тащило даже после touchesEnded вызова) Кроме того, я не вижу Scrollview получить любой контакт событие после того, как мы коснулись вызова, который, как я надеялся.

Любые идеи?

Спасибо

ответ

0

Однажды я попытался решить эту проблему с помощью PanGesture. Для всех подзонов, которые вы хотите перетащить, вы, вероятно, можете добавить UIPanGestureRegognizer и делать все, что вы хотите сделать в своем селекторе. Это хорошо работает даже внутри ScrollView.

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)]; 
[panGesture setDelegate:self]; 
[subviewtoMove addGestureRecognizer:panGesture]; 
+0

Это применимо к устройству ios 3.12? (здание из 4.x) .. выглядит. от 3.2 .. ммм .. хотя я не уверен, когда документ говорит 3.2, это означает, что устройство должно иметь 3.2+ или библиотеку здания должно быть 3.2+ :( – eugene

+0

Я думаю, что это поддерживается для iOS версии 3.2+, поэтому, если вы работая на устройстве 3.12, он не будет работать. – Ankit

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