Создайте экран как домашний экран iPhone с Scrollview и кнопками - PullRequest
0 голосов
/ 18 марта 2010

Я работаю над проектом и мне нужно создать экран, похожий на домашний экран iPhone:

  • Вид прокрутки с несколькими страницами
  • куча иконок
  • Когда не в режиме редактирования, проведите по различным страницам (даже я начал прикосновение к значку)
  • Когда не в режиме редактирования, нажмите значок, чтобы что-то сделать
  • В режиме редактирования перетащите значок, чтобы поменять местами, и даже поменять местами на разных страницах
  • В режиме редактирования нажмите значок, чтобы удалить его

Ранее я читал на нескольких форумах, что мне нужно создать подкласс UIScrollview, чтобы иметь сенсорный ввод для UIViews поверх него. Поэтому я разделил его на подклассы, переопределяя методы обработки касаний:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //If not dragging, send event to next responder
    if (!self.dragging)
        [self.nextResponder touchesBegan:touches withEvent:event];
    else
        [super touchesBegan:touches withEvent:event];
}

В общем, я переопределяю методы touchesBegan :, touchesMoved: и touchesEnded:

Затем в контроллере представления я добавил следующий код:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    UIView *hitView = (UIView *)touch.view;
    if ([hitView isKindOfClass:[UIView class]]) {
        [hitView doSomething];
        NSLog(@"touchesBegan");
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // Some codes to move the icons
    NSLog(@"touchesMoved");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesEnded");
}

Когда я запускаю приложение, у меня корректно определяется метод touchesBegan. Однако, когда я попытался перетащить значок, значок немного переместился, а затем страница начала прокручиваться. В консоли он регистрируется только с 2 или 3 сообщениями «touchesMoved». Тем не менее, я узнал из другого проекта, что он должен регистрировать тонны сообщения «touchesMoved», пока я все еще перетаскиваю на экране.

(Я подозреваю, что для delaysContentTouches установлено значение YES, поэтому оно немного задерживается при попытке перетаскивания значков. После этой небольшой задержки отправляется сигнал обратно в просмотр прокрутки для прокрутки страницы. поправь меня если я не прав.)

Так что, если любая помощь в коде для выполнения вышеуказанных задач будет принята с благодарностью. Я застрял в этом месте почти неделю без надежды. Большое спасибо.

Ответы [ 3 ]

1 голос
/ 16 августа 2012

Очень хороший пример для Uiscrollview Как домашний экран iphone

https://github.com/jarada/myLauncher

0 голосов
/ 02 декабря 2010

Если вы ориентируетесь на iOS 3.2+, я рекомендую использовать UIGestureRecognizer. Для вашего случая использования UIPanGestureRecognizer является правильным выбором.

Код обработки жестов должен выглядеть примерно так:

- (void)handlePanGesture:(UIGestureRecognizer *)gestureRecognizer;
{   
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
       panOffset = [gestureRecognizer locationOfTouch:0 inView:topView];
    }

    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
        CGPoint delta = self.scrollView.contentOffset;
            delta += ([gestureRecognizer locationOfTouch:0 inView:scrollView].x - panOffset.x);
        self.scrollView.contentOffset = delta;
    }
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
                if(self.scrollView.contentOffset >= (self.scrollView.bounds.size.width / 2)) {
                   // animate to the next multiple of self.scrollView.bounds.size.width
                } else {
                   // animate to previous multiple
                }

    }
}
0 голосов
/ 23 марта 2010

Здесь я работал над приложением, похожим на приложение погоды ... вот что вы должны сделать ... Перейдите на веб-сайт разработчика Apple и найдите пример приложения под названием PageControl. Затем, как только вы получите этот scrolllview для работы с вашим приложением, у вас должен быть собственный метод, который вычисляет высоту и ширину UIViews (т.е. значки), и вы [UIColor colorWithPatternImage: (UIImage *) image)], чтобы вы могли дать ему картинка. Затем вы бросаете представления в изменяемый массив и анимацию, которую я бы поиграл с CA-анимацией и UIView-анимацией или даже в обычай.

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