CoreAnimation 核心动画二 锚点

锚点: anchorPoint     以锚点为中心 执行动画 (与 渔夫固定船的点时一致的)

anchorPoint 默认是 0.5,0.5  (注意: 锚点 是一个比例)

anchorPoint 在左上角的时候 为 0,0

anchorPoint 在右上角的时候 为 1,0

anchorPoint 在左下角的时候 为 0,1

anchorPoint 在右下角的时候 为 1,1

 1 #import "ViewController.h"
 2
 3 @interface ViewController ()
 4 {
 5     CALayer *APLayer;
 6     CALayer *ship;
 7 }
 8 @end
 9
10 @implementation ViewController
11
12 - (void)viewDidLoad {
13     [super viewDidLoad];
14     self.view.backgroundColor = [UIColor whiteColor];
15     UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
16     imageView.image = [UIImage imageNamed:@"网格.jpg"];
17     [self.view addSubview:imageView];
18
19     [self addShipLayer];
20
21 }
22
23 - (void)addShipLayer {
24
25     ship = [[CALayer alloc] init];
26     ship.backgroundColor = [UIColor brownColor].CGColor;
27     ship.bounds = CGRectMake(0, 0, 100, 100);
28     ship.position = self.view.center;
29 //    透明度 设置
30     ship.opacity = 0.5;
31     [self.view.layer addSublayer:ship];
32
33     NSLog(@"锚点y:%f\n锚点x:%f", ship.anchorPoint.y, ship.anchorPoint.x);
34
35
36     APLayer = [[CALayer alloc] init];
37     APLayer.bounds = CGRectMake(0, 0, 5, 5);
38 //    通过ship的尺寸  设置 APLayer 的中心点
39 //   position.x = ship的宽*锚点的X     position.y = ship的高*锚点的Y
40     CGFloat x = CGRectGetWidth(ship.bounds)*(ship.anchorPoint.x);
41     CGFloat y = CGRectGetHeight(ship.bounds)*(ship.anchorPoint.y);
42     APLayer.position = CGPointMake(x, y);
43     APLayer.backgroundColor = [UIColor cyanColor].CGColor;
44     [ship addSublayer:APLayer];
45 }
46
47 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
48     UITouch *touch = [touches anyObject];
49     CGPoint touchPoint = [touch locationInView:self.view];
50
51 //    通过点击屏幕的x点/屏幕的宽度 得到点击的点 与屏幕一个比例
52     CGFloat x = touchPoint.x/CGRectGetWidth([UIScreen mainScreen].bounds);
53 //    通过点击屏幕的y点/屏幕的高度 得到点击的点 与屏幕一个比例
54     CGFloat y = touchPoint.y/CGRectGetHeight([UIScreen mainScreen].bounds);
55 //    改变ship 的锚点
56     ship.anchorPoint = CGPointMake(x, y);
57
58
59     CGFloat cx = CGRectGetWidth(ship.bounds)*ship.anchorPoint.x;
60     CGFloat cy = CGRectGetHeight(ship.bounds)*ship.anchorPoint.y;
61     APLayer.position = CGPointMake(cx, cy);
62     NSLog(@"锚点y:%f\n锚点x:%f", ship.anchorPoint.y, ship.anchorPoint.x);
63 //    角度值经计算转化为幅度值。要把角度值转化为弧度制,可以使用一个简单的公式Mπ/180
64     ship.transform = CATransform3DMakeRotation (90*M_PI/180, 0, 0, 1);
65
66 }
67
68 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
69     ship.transform = CATransform3DIdentity;
70 }
71
72 - (void)didReceiveMemoryWarning {
73     [super didReceiveMemoryWarning];
74     // Dispose of any resources that can be recreated.
75 }
76
77 @end

时间: 2024-10-13 01:26:16

CoreAnimation 核心动画二 锚点的相关文章

iOS CoreAnimation(核心动画二)

CATransition :转场动画  翻转动画 @interface ViewController () - (IBAction)previous:(UIButton *)sender; - (IBAction)next:(UIButton *)sender; @property (strong, nonatomic) IBOutlet UIImageView *iconView; @property(nonatomic,assign)int index;//当前图片的索引 @property

ios(CoreAnimation核心动画 一) CABasicAnimation动画与锚点

一.position和anchorPoint position:用来设置CALayer在父层中的位置,以父层的左上角为原点(0, 0) anchorPoint(锚点): 称为"定位点"."锚点" 决定着CALayer身上的哪个点会在position属性所指的位置 以自己的左上角为原点(0, 0) 它的x.y取值范围都是0~1,默认值为(0.5, 0.5) 推荐一个连接:http://www.cnblogs.com/wendingding/p/3800736.html

ios(CoreAnimation核心动画 ) CABasicAnimation动画与锚点

一.position和anchorPoint position:用来设置CALayer在父层中的位置,以父层的左上角为原点(0, 0) anchorPoint(锚点): 称为“定位点”.“锚点” 决定着CALayer身上的哪个点会在position属性所指的位置 以自己的左上角为原点(0, 0) 它的x.y取值范围都是0~1,默认值为(0.5, 0.5) 推荐一个连接:http://www.cnblogs.com/wendingding/p/3800736.html讲的非常详细,而且有图视,默认

coreAnimation核心动画(一)CABasicAnimation

2 1 // 2 // ViewController.m 3 // coreAnimation 4 // 5 // Created by ys on 15/11/21. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 @property (nonatomic,strong)CALayer

CoreAnimation 核心动画 的一些常用属性 和 方法

1.常用属性: frame   bounds   center   alpha    Transition 过渡    transform 动画效果 2.常用方法: +(void)setAnimationDelegate:(id)delegate; +(void)setAnimationWillStartSelector:(SEL)selector; 当动画结束的时候,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selecto

CoreAnimation 核心动画

- (void)createBaseAnimation{ //基础动画 CABasicAnimation *animation = [CABasicAnimation animation]; animation.keyPath = @"bounds"; //    animation.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)];//默认为现在的状态 animation.toValue = [NSVal

coreAnimation核心动画(四)CAAnimationGroup

1 // 2 // ViewController.m 3 // CAAnimationGroup 4 // 5 // Created by ys on 15/11/22. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 @property (weak, nonatomic) IBOutle

coreAnimation核心动画(三)CATansition

1 // 2 // ViewController.m 3 // CATransition 4 // 5 // Created by ys on 15/11/22. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 @property (weak, nonatomic) IBOutlet UI

iOS核心动画Core Animation(二)

一. 使用核心动画实现动画效果的步骤 ■1. 创建动画对象 ■2. 设置动画属性 ■3. 把动画对象添加到某个 CALayer 对象上 ■4. 需要停止动画:可以调用 remove 方法移除动画 具体步骤 1.使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h> 2.初始化一个CAAnimation对象,并设置一些动画相关属性 3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimatio