Как реализовать перетаскиваемый подкласс UIView в UIScrollView? - PullRequest
0 голосов
/ 26 октября 2009

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

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

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

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

Ура, Дуг

1 Ответ

0 голосов
/ 29 марта 2011

Что касается данного сценария, я бы решил это следующим образом:

Прежде всего создайте UIView-Subclass, включая необходимые функции, этот получает ваши перетаскивания Пока это можно перетаскивать, вы должны отключить прокрутку вашего 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...