Я хочу реализовать этот тип функциональности, используя движение ядра. Есть идеи, как реализовать этот тип функциональности. Из исследования я выяснил, что мы должны использовать Device Motion.
В этом режиме масштабирование камеры регулируется перемещением телефона от / к пользователю, то есть когда пользователь перемещает телефон от себя при нажатой кнопке «масштабирование» изображение увеличивается, а когда пользователь перемещает телефон к себе, изображение уменьшается. Когда вы отпускаете кнопку масштабирования, текущий уровень масштабирования сохраняется и не изменяется при движении.
Масштабирование должно работать в любой плоскости и зависеть только от направления движения к / от пользователя (не только в горизонтальная плоскость). Уровень масштабирования зависит от расстояния, на которое перемещается устройство: масштабирование постепенно изменяется в 2 раза, если телефон перемещается на 5 см, и 10-кратное увеличение является максимальным (когда телефон перемещается на 30 см).
Здесь я использовал вот так : Как узнать расстояние перемещения устройства ???
motionManager.StartDeviceMotionUpdates(CMAttitudeReferenceFrame.XArbitraryCorrectedZVertical,
NSOperationQueue.CurrentQueue, delegate (CMDeviceMotion motion, NSError error) {
CMAttitude attitude = motion.Attitude;
CMAcceleration userAcceleration = motion.UserAcceleration;
double roll = attitude.Roll;
double pitch = attitude.Pitch;
double yaw = attitude.Yaw;
double accX = userAcceleration.X;
double accY = userAcceleration.Y;
double accZ = userAcceleration.Z;
Console.WriteLine("Y"+ accY);
Console.WriteLine("Z" + accZ);
UpdateBallWithRoll(roll, pitch, yaw, accX, accY, accZ);
});
private void UpdateBallWithRoll(double roll, double pitch, double yaw, double accX, double accY, double accZ)
{
try
{
X += 2 * roll;
Y += 2 * pitch;
X *= 0.8;
Y *= 0.8;
double newX = ball.Frame.X + X;
double newY = ball.Frame.Y + Y;
newX = Math.Min(280, Math.Max(0, newX));
newY = Math.Min(527, Math.Max(64, newY));
double newR = R + 10 * accZ;
ball.Frame = new CoreGraphics.CGRect(newX, newY, newR, newR);
}
catch (Exception ex)
{
}
}