Нет необходимости искать обходной путь перетаскивания.UIScrollView может сделать это без потери производительности, вызванной прослушиванием касаний.
@interface PulldownView : UIScrollView
@end
@implementation PulldownView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self) {
return self;
}
self.pagingEnabled = YES;
self.bounces = NO;
self.showsVerticalScrollIndicator = NO;
[self setBackgroundColor:[UIColor clearColor]];
double pixelsOutside = 20;// How many pixels left outside.
self.contentSize = CGSizeMake(320, frame.size.height * 2 - pixelsOutside);
// redArea is the draggable area in red.
UIView *redArea = [[UIView alloc] initWithFrame:frame];
redArea.backgroundColor = [UIColor redColor];
[self addSubview:redArea];
return self;
}
// What this method does is to make sure that the user can only drag the view from inside the area in red.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (point.y > height)
{
// Leaving useless touches to the views under it.
return nil;
}
return [super hitTest:point withEvent:event];
}
@end
Как использовать:1. Инициализируйте экземпляр PulldownView.2. Добавьте любой контент, который вы хотите отобразить в экземпляр, используя [addSubview:].3. Скрыть область в красном.
[pulldownView setContentOffset:CGPointMake(0, heightOfTheView - pixelsOutside)];
Это простой пример.Вы можете добавить к нему любые функции, такие как добавление заголовочной панели кнопок в нижней части перетаскиваемой области для реализации click-n-drop или добавление какого-либо метода в интерфейс для изменения положения вызывающей стороной.