2009-12-15 1 views
1

У меня есть UIView внутри моего xib в IB, а внутри это UIScrollview, который представляет собой небольшой квадрат 80x80 и динамически загружается с 8 или около 80 миниатюрными изображениями 80 x 80 ,iPhone sdk Cocoa Touch - Проходит прикосновение от родительского UIView к дочернему UIScrollview

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

Я исследовал и нашел, что это лучший и, возможно, единственный способ сделать это.

UIScrollview находится в «контейнере» UIView по какой-то причине, он должен получать штрихи/проводы и передавать их дочернему элементу UIScrollview, поскольку в противном случае все касания должны были начаться в небольшой области 80x80 UIScrollview и Я хочу, чтобы они были где угодно по ряду изображений.

Я видел пример кода для этого, но не могу его реализовать.

Рассматривайте меня как noob, начиная с начала и до конца, как должны быть настроены UIView и UIScrollview в IB, чтобы разрешить любые касания, и какой код я должен вставить туда?

UIView устанавливаются как scroll_container и ребенок UIScrollView является char_scroll

На данный момент я получил все работает прикосновения передаются от родителей к ребенку, кроме этого, и в настоящий момент прикосновения есть чтобы всегда начинать внутри UIScrollview (крошечный ящик 80x80 в центре), когда я хочу, чтобы прокручивать влево или вправо в длинном горизонтальном родительском UIView 480X80 и прокручивать дочернее UIScrollview.

Надеюсь, вы сможете помочь и понять, что я имею в виду!

ответ

0

Все мои инстинкты говорят, что это не способ сделать это!

Даже если:

(а) документы Apple, говорят, что это работает и как это сделать;

(б), и вы можете получить штуковина работу Трассировка и получить объекты UIEvent течет красиво

, если это был я, я бы ожидать, что первое изменение Apple, сделать в ОС взломать код!

Что бы я сделал это:

  • Используйте Core Animation API.
  • Модели замедления изображений при перемещении палец отпускает их себе
  • Попробуйте различные скорости замедления и различных алгоритмов хватая (попробуйте и без подпрыгивая), пока вы не найдете приемлемый пользовательский опыт (попробуйте прототипирование в DHTML, прежде вдаваясь в Cocoa Touch)
  • Stop с помощью UIScrollView и просто использовать в UIView

Вы должны моделировать в вашем штате:

State1: (дельта х, дельта у) изменение позиции по требованию пользователя на это касание

ИЛИ

State2: (дельта х, дельта у) и (veclocity х, скорость у) и часы() время пальца при отпускании, если изображения по-прежнему замедляется и не приходят отдыхать

state3: изображения стационарные

Из этого параметры анимации могут быть вычислены:

Начальное: дельта-х, дельта-у, скорость-х, скорость-у, часы() время в мс

Если поддерживать раскачивания: любые промежуточные поворотные точки

Финал: дельта-х, дельта-у, скорость-х, скорость-у, часы() Время в мс

И от этих параметров анимации, набор кадровых кадров анимации можно вычислить и загрузить в Core Animation. (Большое количество ключевых кадров необходимо плавно показывать пользовательское замедление во время анимации.)

-

Какие ссылки вы нашли, чтобы сказать, что вы предлагаете это лучший способ?

0

Вы можете подклассифицировать UIScrollView и переопределить -pointInside: withEvent: method. Реализация UIView по умолчанию возвращает что-то вроде CGRectContainsPoint (self.bounds, thePointToTest) ;. Просто проверьте более широкий прямоугольник.

0

То, как вы это делаете, в основном там. Я попытался подклассифицировать UIView, чтобы передать события касания вниз, но моя первая попытка не сработала, и я нашел это вместо: How to extend UIScrollView's response area

В принципе, подкласс UIScrollView расширяет диапазон hitTest. У вас все еще будет содержащий UIView, но он будет пассивным.