Ответ 1
Я думаю, вы используете симулятор, поэтому гравитация всегда ортогональна к дну.
Поведение должно отличаться на реальном устройстве imo., так как вы всегда будете слегка наклонять устройство.
Я видел два способа описания поведения падающих объектов для разных ориентаций устройств с использованием каркаса CoreMotion. Я пробовал обе версии в коде, и они оба, похоже, ведут себя так, как я ожидаю, т.е. Падают на Землю независимо от ориентации устройства.
Мне просто интересно, почему обе версии ведут себя одинаково, хотя для первой версии ускорение в направлениях х и у, т.е. dx
и dy
, переключается в альбомной ориентации?
1)
if var dx = data?.acceleration.x, var dy = data?.acceleration.y {
switch UIDevice.currentDevice().orientation {
case .Portrait:
dy = -dy
case .PortraitUpsideDown:
break
case .LandscapeRight:
swap(&dx, &dy)
case .LandscapeLeft:
swap(&dx, &dy)
dy = -dy
default:
dx = 0
dy = 0
}
gravity.gravityDirection = CGVector(dx: dx, dy: dy)
}
2)
if var dx = data?.acceleration.x, var dy = data?.acceleration.y {
switch UIDevice.currentDevice().orientation {
case .Portrait:
dy = -dy
case .PortraitUpsideDown:
break
case .LandscapeRight:
break
case .LandscapeLeft:
break
default:
dx = 0
dy = 0
}
gravity.gravityDirection = CGVector(dx: dx, dy: dy)
}
Я думаю, вы используете симулятор, поэтому гравитация всегда ортогональна к дну.
Поведение должно отличаться на реальном устройстве imo., так как вы всегда будете слегка наклонять устройство.
1.) Убедитесь, что вы используете правильно сохраненный файл. 2.) Возможно, блок блокировки коммутатора не сможет получить доступ к Потрать, PotraitUpsideDown, LandscapeLeft и LandscapeRight. Затем он может перейти к умолчанию. Проверьте определения для этого. Тогда доступен гравитация.