Повернуть изображение в соответствии с касанием

Я вращаю изображениеView, которое является минутной стрелкой часов, с

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
  {
    UITouch *touch = [touches anyObject];
    if ([touch view] == _imgViewMinuit)
    {
        NSLog(@"Touched");
        _imgMinuitHand.transform = CGAffineTransformRotate(_imgMinuitHand.transform,DEGREES_RADIANS(6));
     }
 }

Теперь я хочу повернуть его по моему пальцу, по часовой стрелке/против часовой стрелки, со скоростью моего прикосновения.

Как я могу этого добиться?


person sourabhkumbhar    schedule 16.11.2013    source источник


Ответы (1)


проверьте этот код

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[[event allTouches]anyObject];

    [self transformSpinnerwithTouches:touch];
}

-(void)transformSpinnerwithTouches:(UITouch *)touchLocation
{
    CGPoint touchLocationpoint = [touchLocation locationInView:self.view];
    CGPoint PrevioustouchLocationpoint = [touchLocation previousLocationInView:self.view];
    //origin is the respective piont from that i gonna measure the angle of the current position with respective to previous position ....
    CGPoint origin;
    origin.x = arrow.center.x;
    origin.y = arrow.center.y;
    CGPoint previousDifference = [self vectorFromPoint:origin toPoint:PrevioustouchLocationpoint];
    CGAffineTransform newTransform = CGAffineTransformScale(arrow.transform, 1, 1);
    CGFloat previousRotation = atan2(previousDifference.y, previousDifference.x);
    CGPoint currentDifference = [self vectorFromPoint:origin toPoint:touchLocationpoint];
    CGFloat currentRotation = atan2(currentDifference.y, currentDifference.x);
    CGFloat newAngle = currentRotation- previousRotation;
    temp1 = temp1 + newAngle;
    //NSLog(@"temp1 is %f",temp1);
    //NSLog(@"Angle:%F\n",(temp1*180)/M_PI);
    newTransform = CGAffineTransformRotate(newTransform, newAngle);
    [self animateView:arrow toPosition:newTransform];
}
-(void)animateView:(UIView *)theView toPosition:(CGAffineTransform) newTransform
{
arrow.transform = newTransform;
}

-(CGPoint)vectorFromPoint:(CGPoint)firstPoint toPoint:(CGPoint)secondPoint
{
    CGFloat x = secondPoint.x - firstPoint.x;
    CGFloat y = secondPoint.y - firstPoint.y;
    CGPoint result = CGPointMake(x, y);
    //NSLog(@"%f %f",x,y);
    return result;
}
person Vizllx    schedule 16.11.2013
comment
Спасибо... большое... работает. всего 2 вопроса сейчас. 1. Поскольку у меня есть две стрелки для часов, их нужно вращать, когда пользователь касается их и перетаскивает. 2. Могу ли я повернуть те, у которых фиксированный угол составляет 6 или 30 градусов? потому что я дополнительно рассчитываю время на основе угла. и часовая стрелка должна двигаться только с разницей в час в часах. - person sourabhkumbhar; 16.11.2013
comment
вы только перемещаете вращение на 6 градусов каждый раз, вам нужно рассчитать угол, под которым должна находиться рука, исходя из положения касания, скажем, у вас есть точка касания x, y относительно начала координат в центре часов, вы можете рассчитать угол с помощью тригонометрии CGFloat angle = atan2(y, x); _imgHand.transform = CGAffineTransformMakeRotation(угол); - person Vizllx; 16.11.2013
comment
@SourabhKumbhar Примите ответ, чтобы он был полезен другим. - person Vizllx; 16.11.2013
comment
Ok. И что мне делать, если это нужно делать только тогда, когда пользователь касается изображения и перетаскивает его? - person sourabhkumbhar; 16.11.2013