/* anchorPoint 锚点(是一个比例) 以锚点为中心执行动画 (与 渔夫 固定船的 一致) anchorPoint 默认是0.5 0.5 anchorPoint 在左上角的时候为 (0,0)在右上角为(1,0) 在左下角为(0,1) 在右下角为(1,1) */ #import "ViewController.h" @interface ViewController () { CALayer *ship; CALayer *APLayer; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor grayColor]; UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.view.frame]; imageView.image = [UIImage imageNamed:@"网格图"]; [self.view addSubview:imageView]; [self shipLayer]; } - (void)shipLayer{ ship = [[CALayer alloc]init]; ship.backgroundColor = [UIColor purpleColor].CGColor; ship.bounds = CGRectMake(0, 0, 10, 100); ship.position = self.view.center; // opacity设置CALayer的透明度 ship.opacity = 0.7; [self.view.layer addSublayer:ship]; NSLog(@"x %f,y %f",ship.anchorPoint.x,ship.anchorPoint.y); APLayer = [[CALayer alloc]init]; APLayer.bounds = CGRectMake(0, 0, 10, 10); APLayer.backgroundColor = [UIColor redColor].CGColor; APLayer.cornerRadius = 5; // 通过ship 设置 APLayer 的中心点 position.x = ship的宽 * 锚点的x position.y = ship的高 * 锚点的y CGFloat x = CGRectGetWidth(ship.bounds)*ship.anchorPoint.x; CGFloat y = CGRectGetHeight(ship.bounds)*ship.anchorPoint.y; APLayer.position = CGPointMake(x, y); [ship addSublayer:APLayer]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [touches anyObject]; CGPoint touchpoint = [touch locationInView:self.view]; // 通过点击屏幕的x点/屏幕的宽度 得到点击的点 与屏幕一个比例 CGFloat x = touchpoint.x/CGRectGetWidth([UIScreen mainScreen].bounds); // 通过点击屏幕的y点/屏幕的高度 得到点击的点 与屏幕一个比例 CGFloat y = touchpoint.y/CGRectGetHeight([UIScreen mainScreen].bounds); // 改变ship的锚点 ship.anchorPoint = CGPointMake(x, y); CGFloat cx = CGRectGetWidth(ship.bounds)*ship.anchorPoint.x; CGFloat cy = CGRectGetHeight(ship.bounds)*ship.anchorPoint.y; APLayer.position = CGPointMake(cx, cy); NSLog(@"x %f,y %f",ship.anchorPoint.x,ship.anchorPoint.y); // 角度值经计算转化为弧度值。要把角度值转化为弧度值,可以使用一个简单的公式Mπ/180 // x y z 是三个轴 要围绕谁去旋转就将谁设置为1,其余为0 ship.transform = CATransform3DMakeRotation(180*M_PI/180,0 , 0, 1); } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ ship.transform = CATransform3DIdentity; }