iOS图片如何旋转

iOS开发图片如何旋转。

代码分享:
点击进入

方法一

/关于M_PI
#define M_PI 3.14159265358979323846264338327950288
其实它就是圆周率的值,在这里代表弧度,相当于角度制 0-360 度,M_PI=180度
旋转方向为:顺时针旋转
(M_PI
0.5)表示旋转90度
*/

    UIImageView *imageView = [[UIImageView alloc]init];
    imageView.frame = CGRectMake(50, 50, 200, 200);
    imageView.backgroundColor =[UIColor redColor];
    imageView.image = [UIImage imageNamed:@"750_2X"];
//顺时针旋转75度,M_PI为180度,要逆时针为   -Degree
    double Degree=75.0/180.0;
    CGAffineTransform transform= CGAffineTransformMakeRotation(M_PI* Degree);
    imageView.transform = transform;//旋转
    [self.view addSubview:imageView];
方法二

根据屏幕任意一点,旋转相应的角度

Snip20170707_6.png

如上图,点击屏幕上点B
屏幕frame起点绿色为大写(X=0,Y=0);
以屏幕的中心点frame(self.view.center.x,self.view.center.y)作为数学的坐标原点红色小写(x=0,y=0)。
命题:
知道屏幕任意一点B,点B在屏幕的frame(X,Y),让图片顺时针旋转到角CAB 的度数。
求角CAB的度数。
思路:数学中,知道直角三角形的边长a,b,c,就可以根据反三角函数来求角度。
1.求反三角函数,必须知道,如何求三角函数
2.如何求三角函数,必须知道,直角三角形的边长a,b,c
3.现在只知道该点B在屏幕的frame,和屏幕的中心点frame,固然可以求出直角三角的,a,b,c边长

程序如何实现:
#define UISCREEN_WEDTH     [UIScreen mainScreen].bounds.size.width
#import "ViewXuanZhuan.h"

@interface ViewXuanZhuan ()
{
    CGPoint clickCoordinate;
    UIImageView* ArrowView;
}
@end

@implementation ViewXuanZhuan

- (void)viewDidLoad {
    [super viewDidLoad];
//设置背景图片
    NSString *path = [[NSBundle mainBundle]pathForResource:@"1080_3X"ofType:@"png"];
    UIImage *image = [UIImage imageWithContentsOfFile:path];
    self.view.layer.contents = (id)image.CGImage;
    [self creatImage];
}
#pragma mark=======creatImage
-(void)creatImage{
    
    CGPoint screenCenterPoint=self.view.center;
    
    
    UIImage *pic1 = [ UIImage imageNamed:@"yk_03_3X.png"];
    
    ArrowView  = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,UISCREEN_WEDTH-40 , UISCREEN_WEDTH-40)];
    [ArrowView setCenter:screenCenterPoint];
    [ArrowView setImage:pic1];
    ArrowView.userInteractionEnabled=YES;
    [self.view addSubview:ArrowView];
    
}
//当有一个或多个手指触摸事件在当前视图或window窗体中响应
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    NSSet *allTouches = [event allTouches];    //返回与当前接收者有关的所有的触摸对象
    UITouch *touch = [allTouches anyObject];   //视图中的所有对象
    CGPoint point = [touch locationInView:[touch window]]; //返回触摸点在window中的当前坐标
    CGFloat x = point.x;
    CGFloat y = point.y;
    NSLog(@"屏幕touch=Frame(%f, %f)", x, y);
    //点B的数学坐标,注意正负
    clickCoordinate =CGPointMake(x-self.view.center.x,self.view.center.y-y);
    NSLog(@"数学上坐标的B(%f, %f)",clickCoordinate.x, clickCoordinate.y);
    
    
    [self rotation:clickCoordinate];
}
#pragma mark=======图片的旋转
-(void)rotation:(CGPoint)point{
    CGFloat a=point.x;
    CGFloat b=point.y;
    //勾股定理  sqrt(X)是X开根号  pow(X,n)是X的n次方
    CGFloat c=sqrt(pow(b, 2)+pow(a, 2));
    //三角函数cosA=角A邻边/斜边
    double cosA=b/c;
    //反三角函数
    double acosA=acos(cosA);
    //转换成角度
    double Degree = acosA/M_PI * 180;
    NSLog(@"角度Degree=%f",Degree);
    double Angle =Degree/180.0;
    if (a>=0) {
        //a>0说明在数学中的第二和第四限象,故顺时针旋转
        //CGAffineTransform transform= CGAffineTransformMakeRotation(acosA);
        CGAffineTransform transform= CGAffineTransformMakeRotation(M_PI*Angle);
        ArrowView.transform = transform;
        
    }else if (a<0){
        //a>0说明在数学中的第一和第三限象,故逆时针旋转
        //CGAffineTransform transform= CGAffineTransformMakeRotation(-acosA);
        CGAffineTransform transform= CGAffineTransformMakeRotation(M_PI*-Angle);
        ArrowView.transform = transform;
        
    }
    
}

总感觉我的做法有点绕,希望有更好的解决办法,一定要留言,谢谢您。

如果文章帮到您,喜欢点个赞,谢谢您。

文章内容出错,记得留言,感激不尽。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容