2009-10-26 1 views
0

У меня довольно сложная прокрутка scenerio Мне нужно отсортировать. У меня есть родительский UIScrollView с единственным представлением контейнера, содержащим два дочерних подкласса UIView. Вызовите их viewA и viewB. UIScrollView был ограничен для прокрутки/масштабирования по горизонтали. ViewA и ViewB выложены как горизонтальные полосы, один над другим. Границы зрения A и viewB превышают границы scrollView и отображаются во время прокрутки/масштабирования, как это обычно бывает. Все идет нормально.Как реализовать перетаскиваемый подкласс UIView в UIScrollView?

Здесь все становится немного сложнее: мне нужно иметь возможность перетаскивать viewB как по вертикали, так и по горизонтали. Я предпочитаю не встраивать viewB в свой собственный scrollView.

Мой вопрос: какой правильный способ реализовать простую вертикальную прокрутку для viewB, но при этом он ведет себя корректно относительно scrollView? Я просто реализую четыре метода сенсорной последовательности: начало/перемещение/завершение/отмену в viewB, манипулирование матрицей преобразования viewB, и я в явном виде или больше для нее?

Заранее спасибо.

Приветствия, Doug

+0

Почему вы не хотите ViewB быть в своем собственном Scrollview? – NSResponder

+0

Одним словом: сложность. ScrollView слишком много для моих нужд. – dugla

ответ

0

Ну, относительно вашего данный сценарий, я бы решить эту проблему следующим образом:

Прежде всего создать UIView-Подкласс, включая nessecary функции, это один получает ваше сопротивление -действий. Хотя это перетаскивается, вы должны отключить прокрутку вашего UIScrollView. Заголовок:

#import <UIKit/UIKit.h>; 

@interface ViewB : UIView 
{ 
} 

@end 

Реализация:

#import "ViewB.h" 

@implementation DragView 
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.alpha = 0.5; 
    ((UIScrollView*)self.superview.superview).scrollEnabled = NO; 
} 

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

- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.alpha = 1.0; 
    ((UIScrollView*)self.superview.superview).scrollEnabled = YES; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.alpha = 1.0; 
    ((UIScrollView*)self.superview.superview).scrollEnabled = YES; 
} 

// Further methods... 

@end