Вытащить меню в CocoaTouch - PullRequest
       33

Вытащить меню в CocoaTouch

4 голосов
/ 05 октября 2010

Я пытаюсь создать UIView / UIControl, чтобы люди могли перетащить его вверх и открыть текстовое поле, а затем перетащить вниз, чтобы скрыть его.Тем не менее, мне еще предстоит найти способ сделать эту «жидкость» - она ​​всегда останавливается в случайных местах и ​​не позволяет больше двигаться.В настоящее время я использую UIView для верхней части представления, и вот текущий код:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

 UITouch *touch = [touches anyObject];

 if ([touch view] == topMenuView) {
  CGPoint location = [touch locationInView:self.superview];

  CGPoint locationInsideBox = [touch locationInView:self];

  CGPoint newLocation = location;
  newLocation.x = self.center.x;
  newLocation.y = newLocation.y + (self.frame.size.height - locationInsideBox.y) / 2;

  if ((self.superview.frame.size.height - newLocation.y) < (self.frame.size.height / 2) && (self.superview.frame.size.height - newLocation.y) > -32)
  {
   self.center = newLocation;
  }
  return;
 }
}

Любая помощь будет высоко ценится!

Ответы [ 5 ]

1 голос
/ 17 октября 2010

Я бы использовал распознаватель панорамирования. Следующий код просто переместит вид вверх и вниз вместе с пальцем пользователя. Если вы хотите ограничить, насколько высоко он перемещается, его нужно привязать к месту или набрать импульс, который вам нужно добавить к нему.

UIView * view; // The view you're moving
CGRect originalFrame; // The frame of the view when the touch began

- (void) pan:(UIPanGestureRecognizer *)pan {
    switch (pan.state) {
        case UIGestureRecognizerStateBegan: {
            originalFrame = view.frame;
        } break;

        case UIGestureRecognizerStateChanged:
        case UIGestureRecognizerStateEnded: {
            CGPoint translation = [pan translationInView:view];
            CGRect frame = originalFrame;
            frame.origin.y += translation.y;
            view.frame = frame;
        } break;
    }
}
0 голосов
/ 16 октября 2010

Я бы порекомендовал разделить проблему на две части:

  • Реализация представления с текстовым полем внизу - вам просто нужно будет реализовать свой собственный контроллер представления / представления.
  • Добавьте ваше представление как подпредставление UIScrollView.

Этот является хорошим руководством, которое демонстрирует правильную инициализацию UIScrollView и встраивание в него содержимого.

Пользовательские представления / контроллеры немного шире:)

0 голосов
/ 11 октября 2010

То, что вы пытаетесь выполнить, на самом деле является не чем иным, как прокручиваемым представлением, поэтому я бы рекомендовал использовать UIScrollView.

Поместите ваш UIView в UIScrollView с прозрачным фоном и поместите UIScrollView поверхваше текстовое поле.Установите правильный размер содержимого, и все готово.

0 голосов
/ 16 октября 2010

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

0 голосов
/ 11 октября 2010

Удаление этой строки вполне может помочь вам:

newLocation.y = newLocation.y + (self.frame.size.height - locationInsideBox.y) / 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...