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;