Нажмите и опустите вид - PullRequest
       3

Нажмите и опустите вид

5 голосов
/ 01 января 2012

У меня есть интерфейс в верхней части интерфейса (под строкой состояния), который показывает только нижнюю часть.

На самом деле, я хочу, чтобы красный uiview скользил вниз, чтобы он полностью отображался перетаскиванием, таким как центр уведомлений в родной iOS, а не просто нажатием кнопки.

Что мне использовать«потрогать и потянуть вниз» окно просмотра, чтобы его можно было полностью отобразить?

Example

Ответы [ 3 ]

9 голосов
/ 28 апреля 2012

Нет необходимости искать обходной путь перетаскивания.UIScrollView может сделать это без потери производительности, вызванной прослушиванием касаний.

pulldown

@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 или добавление какого-либо метода в интерфейс для изменения положения вызывающей стороной.

3 голосов
/ 01 января 2012

Сделать подкласс из UIView.

Переопределить touchesBegan:withEvent и touchesMoved:withEvent.

В touchesBegan возможно внесите визуальное изменение, чтобы пользователь знал, что он касается вида. В прикосновениях движется использование [[touches anyObject] locationInView:self] а также [[touches anyObject] previousLocationInView:self]

для расчета разницы между текущей позицией касания и последней позицией касания (определить перетаскивание вниз или перетаскивание назад).

Затем, если вы выполняете нестандартное рисование, вызовите [self setNeedsDisplay], чтобы сообщить вашему виду перерисовываться в его методе drawRect:(CGRect)rect.

Примечание: предполагается, что в этом представлении не используется множественное касание.

1 голос
/ 01 января 2012

См. Мой ответ в приложении для iPhone: реализация перетаскивания изображений в UIView

Вам просто нужно использовать методы TouchesBegin и TouchesEnded.В этом примере я показал, как использовать CGPoint, вместо этого вы должны попытаться использовать setFrame или drawRect для своего представления.

Как только метод TouchesMoved будет вызывать васнужно использовать setFrame или drawRect (не уверен, но который когда-либо работает, в основном setFrame) и принять высоту от CGPoint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...