Как автоматически поворачивать изображение вокруг центральной точки касанием пальца

На iPhone, как реализовать вращение изображения вокруг центральной точки с помощью касания пальцем?

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

Кто может помочь дать некоторые кусочки кодов (Object-C) или некоторые предложить?

Ответы на вопрос(3)

ажения, отображаемого внутри. Что касается вращающейся части, вы просто отслеживаете местоположение и движение касаний в вашем представлении с помощью touchSbegan, touchesMoved и touchesEnded.

Используйте расстояние и время между обновлениями касаний, чтобы рассчитать скорость, и используйте ее, чтобы установить скорость вращения. Как только вы начнете вращать изображение, периодически обновляйте положение (возможно, с помощью NSTimer) и уменьшайте скорость вращения на некоторую постоянную.

Я вчера работал с приложением «закрутить бутылку». В окне у меня есть ImageView с бутылкой, которая должна реагировать на прикосновения и поворачивать способ, которым пользователь проводит пальцем. Я изо всех сил пытался заставить мой ImageView вращаться во время сенсорных событий (TouchesBegan, Touchesoved, TouchesEnd). Я использовал этот код в TouchesMoved, чтобы узнать угол поворота для поворота изображения.

public override void TouchesMoved (NSSet touches, UIEvent evt)
{    
  PointF pt = (touches.AnyObject as UITouch).LocationInView(this);

  float x = pt.X  - this.Center.X;
  float y = pt.Y  - this.Center.Y;
  double ang =  Math.Atan2(x,y);

  // yada yada, rotate image using this.Transform
}

ЭТО ВАЖНО!When the ImageView rotates, even the x & y-coordinates changes. Поэтому постоянное прикосновение к одной и той же области даст мне разные значения в точках pt и prePt. Подумав, погуглив и почитав, я нашел простое решение проблемы. Свойство «SuperView» - свойство ImageView.

PointF pt = (touches.AnyObject as UITouch).LocationInView(this.SuperView);

Имея это небольшое изменение, сделав его намного проще, я не могу использовать UITouch-metohs LocationInView и PreviousLocationInView и получить правильный x & amp; координаты у. Это часть моего кода.

float deltaAngle;

public override void TouchesMoved (NSSet touches, UIEvent evt)
{
    PointF pt = (touches.AnyObject as UITouch).LocationInView(this.Superview);

    float x = pt.X  - this.Center.X;
    float y = pt.Y  - this.Center.Y;
    float ang =  float.Parse(Math.Atan2(dx,dy).ToString());


    //do the rotation
     if (deltaAngle == 0.0) {
       deltaAngle = ang;
     }
else
    {
      float angleDif = deltaAngle - ang;
      this.Transform = CGAffineTransform.MakeRotation(angleDif);
    }   
}

Надеюсь, что это помогло кому-то потратить часы на то, чтобы понять, как безумно крутить бутылку! :)

зование любому слою или элементу пользовательского интерфейса, используя свойство transform.

Вы можете создать преобразование вращения, используяCGAffineTransform CGAffineTransformMakeRotation( CGFloat angle) который вернет преобразование, которое вращает элемент. Поворот по умолчанию должен быть вокруг центральной точки.

Имейте в виду, что вращение ограничено 360 градусами, поэтому, если вы хотите повернуть нечто большее, чем это (скажем, на 720 градусов) - вам нужно разбить вращение на несколько последовательностей.

Вы можете найтиэта ТАКАЯ статья полезно также.

Ваш ответ на вопрос