Rotate image on center using one finger touch

后端 未结 1 1733
盖世英雄少女心
盖世英雄少女心 2020-12-08 03:20

I want to rotate the below image on a center point using one finger touch...

And i want to display the value of the image with the label when I rotate the image usin

相关标签:
1条回答
  • 2020-12-08 04:02

    Wasn't totally sure what you were after; but try out this code.

    If you create a new View-based Application project called 'Rotation' and replace the code in RotationViewController.h and .m for the following you'll get a green block that you can rotate using your calculations. You can replace the green block UIView with your UIImageView, or anything else you want to spin.


    RotationViewController.h

    #import <UIKit/UIKit.h>
    
    @interface RotationViewController : UIViewController
    {
        UIView* m_block;
        UILabel* m_label;
        CGPoint m_locationBegan;
        float m_currentAngle;
    }
    
    - (float) updateRotation:(CGPoint)_location;
    
    @end
    

    RotationViewController.m

    #import "RotationViewController.h"
    
    double wrapd(double _val, double _min, double _max)
    {
        if(_val < _min) return _max - (_min - _val);
        if(_val > _max) return _min - (_max - _val);
        return _val;
    }
    
    @implementation RotationViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        CGRect blockFrame = CGRectMake(0, 0, 200, 200);
        m_block = [[UIView alloc] initWithFrame:blockFrame];
        m_block.backgroundColor = [UIColor greenColor];
        m_block.center = self.view.center;
        [self.view addSubview:m_block];
        [m_block release];
        
        CGRect labelFrame = CGRectMake(0, 0, 320, 30);
        m_label = [[UILabel alloc] initWithFrame:labelFrame];
        m_label.text = @"Loaded";
        [self.view addSubview:m_label];
    }
    
    - (void) touchesBegan:(NSSet *)_touches withEvent:(UIEvent *)_event
    {
        UITouch* touch = [_touches anyObject];
        CGPoint location = [touch locationInView:self.view];
        m_locationBegan = location;
    }
    
    - (void) touchesMoved:(NSSet *)_touches withEvent:(UIEvent *)_event
    {
        UITouch* touch = [_touches anyObject];
        CGPoint location = [touch locationInView:self.view];
        [self updateRotation:location];
    }
    
    - (void) touchesEnded:(NSSet *)_touches withEvent:(UIEvent *)_event
    {
        UITouch* touch = [_touches anyObject];
        CGPoint location = [touch locationInView:self.view];
        m_currentAngle = [self updateRotation:location];
    }
    
    - (float) updateRotation:(CGPoint)_location
    {
        float fromAngle = atan2(m_locationBegan.y-m_block.center.y, m_locationBegan.x-m_block.center.x);
        float toAngle = atan2(_location.y-m_block.center.y, _location.x-m_block.center.x);
        float newAngle = wrapd(m_currentAngle + (toAngle - fromAngle), 0, 2*3.14);
    
        CGAffineTransform cgaRotate = CGAffineTransformMakeRotation(newAngle);
        m_block.transform = cgaRotate;
        
        int oneInFifty = (newAngle*50)/(2*3.14);
        
        m_label.text = [NSString stringWithFormat:@"Angle: %f 1in50: %i", newAngle, oneInFifty];
    
        return newAngle;
    }
    
    @end
    

    0 讨论(0)
提交回复
热议问题