iOS7, как понять величину UIPushBehavior в режиме UIPushBehaviorModeInstantious?

Я смотрю на документацию Apple для UIPushBehavior, и это сбивает меня с толку в мгновенном режиме. Я знаю, что формула ускорения это сила = масса * ускорение. Я предполагаю, что масса вида равна ширине * высоте * плотности (1). Документация описывает величину толчка следующим образом:

Величина по умолчанию равна нулю, что эквивалентно отсутствию силы. Непрерывный вектор силы с величиной 1,0, приложенный к точке обзора 100 точек x 100, значение плотности которой равно 1,0, приводит к ускорению обзора 100 точек / секунду ² в направлении, указанном свойством angle или pushDirection.

Это имеет смысл с точки зрения непрерывного нажатия, где оно обеспечивает постоянное ускорение. Это ничего не говорит о неосторожном толчке. Как я могу понять, какую скорость мгновенный толчок величины 1 обеспечит для просмотра 100x100?

2 ответа

Решение

РЕДАКТИРОВАТЬ: кажется, @martin есть лучший ответ. Пожалуйста, проверь это. У меня еще не было времени проверить это.

В случае мгновенного толчка ускорение отсутствуетUIPushBehaviorModeInstantaneous). Тогда вы не можете играть с magnitude (это не имеет никакого влияния). Вместо этого вы можете играть с pushDirection векторное значение т.е..:

pushBehavior.pushDirection = CGVectorMake(100, 100);

Также вы можете добавить UIDynamicItemBehavior действовать непосредственно на поведение объекта вашего перемещения, чтобы добавить некоторые resistance, friction... если хочешь помедленнее

UIDynamicItemBehavior *resistanceBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[view]];
resistanceBehavior.resistance = 1.0;
[self.animator addBehavior:resistanceBehavior];

Сначала я проголосовал за ответ @HuguesBR, но теперь я сожалею, потому что его первый абзац неверен (не могу отменить голосование через 5 минут).

Согласно документации,

Вы выражаете вектор силы поведения толчка в терминах величины (величины) и радианного угла (угла). Вместо того, чтобы использовать угол радиана, вы можете эквивалентно выразить направление, используя компоненты x и y, используя свойство pushDirection. Какой бы подход вы ни использовали, альтернативные эквивалентные значения обновляются автоматически.

Так что если вы установите pushDirection вектор к (-1, 0) вот увидишь в отладке magnitude = 1 а также angle = PI/2, и наоборот.

Я экспериментировал UIPushBehaviorModeInstantaneous а также UIPushBehaviorModeContinuous режимы в небольшом проекте XCode, без UIDynamicItemBehavior определены. И я обнаружил странное поведение:

UIPushBehaviorModeInstantaneous:

  • применяется только однажды сила к объекту, сила остается навсегда.
  • имеет это active свойство установлено в NO по умолчанию. Настройка active собственность на YES применяет силу! А также

    self.pushBehavior1.active = YES;
    self.pushBehavior1.active = YES;
    

    применяет силу дважды! (см. правки)

  • После того, как поведение толчка активировано, вызов self.pushBehavior1.active = NO; ничего не делает.

UIPushBehaviorModeContinuous:

  • применяет каждый кадр силой к объекту. Это определенно и ускорение, но ограниченное скоростью, превышающей мгновенную...
  • active свойство установлено в YES по умолчанию меняется magnitude (или же pushDirection) начинает движение.
  • скорость просмотра сначала медленнее, чем мгновенно нажатая, но она быстро превосходит ее.

Итак, чтобы ответить на @AlexStone, я измерил в коде скорость движущегося объекта и мгновенно толкнул изображение 100x100 с помощью density из 1 и resistance 0 даст объекту скорость 100 очков / секунд (на самом деле я наблюдал около 99,8)

РЕДАКТИРОВАТЬ:

После дополнительных испытаний в Instantaneous режим, кажется, что active свойство установлено в YES по умолчанию, но возвращается к NO в конце кадра, сразу после симуляции физики.
В самом деле,

self.pushBehavior.magnitude = 1;
[self.animator addBehavior:self.pushBehavior];

создаст движение.
Чтобы снова нажать, просто сделайте:

self.pushBehavior.active = YES;
Другие вопросы по тегам