CoreAnimation 核心动画二 锚点
锚点: anchorPoint 以锚点为中心 执行动画 (与 渔夫固定船的点时一致的)
anchorPoint 默认是 0.5,0.5 (注意: 锚点 是一个比例)
anchorPoint 在左上角的时候 为 0,0
anchorPoint 在右上角的时候 为 1,0
anchorPoint 在左下角的时候 为 0,1
anchorPoint 在右下角的时候 为 1,1
#import "ViewController.h" @interface ViewController ()
{
CALayer *APLayer;
CALayer *ship;
}
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
imageView.image = [UIImage imageNamed:@"网格.jpg"];
[self.view addSubview:imageView]; [self addShipLayer]; } - (void)addShipLayer { ship = [[CALayer alloc] init];
ship.backgroundColor = [UIColor brownColor].CGColor;
ship.bounds = CGRectMake(, , , );
ship.position = self.view.center;
// 透明度 设置
ship.opacity = 0.5;
[self.view.layer addSublayer:ship]; NSLog(@"锚点y:%f\n锚点x:%f", ship.anchorPoint.y, ship.anchorPoint.x); APLayer = [[CALayer alloc] init];
APLayer.bounds = CGRectMake(, , , );
// 通过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);
APLayer.backgroundColor = [UIColor cyanColor].CGColor;
[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(@"锚点y:%f\n锚点x:%f", ship.anchorPoint.y, ship.anchorPoint.x);
// 角度值经计算转化为幅度值。要把角度值转化为弧度制,可以使用一个简单的公式Mπ/180
ship.transform = CATransform3DMakeRotation (*M_PI/, , , ); } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
ship.transform = CATransform3DIdentity;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
CoreAnimation 核心动画二 锚点的更多相关文章
- iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程
iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程 一.引言 二.初识CoreAnimation 三.锚点对几何属性的影响 四.Layer与View之间的关系 ...
- CoreAnimation 核心动画 / CABasicAnimation/ CAKeyframeAnimation
- (void)createBaseAnimation{ //基础动画 CABasicAnimation *animation = [CABasicAnimation animation]; anim ...
- iOS CoreAnimation 核心动画
一 介绍 一组非常强大的动画处理API 直接作用在CALAyer上,并非UIView(UIView动画) CoreAnimation是所有动画的父类,但是不能直接使用,应该使用其子类 属性: dura ...
- ios开发图层layer与核心动画二:CATransform3D,CAlayear和UIView区别,layer的position和anchorpoint
一:CATransform3D #import "ViewController.h" @interface ViewController () @property (weak, n ...
- CoreAnimation 核心动画一 (一些常用属性 和 方法)
1.常用属性: frame bounds center alpha Transition 过渡 transform 动画效果 2.常用方法: +(void)setAnimati ...
- CoreAnimation 核心动画
- (void)createBaseAnimation{ //基础动画 CABasicAnimation *animation = [CABasicAnimation animation]; anim ...
- iOS_核心动画(二)
目 录: 一.Core Animation开发步骤 二.Core Animation的继承结构 三.CAAnimation常用的属性 四.CAPropertyAnimation(属性动画) 五.CAB ...
- iOS核心动画高级技巧之图层变换和专用图层(二)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
- 核心动画——Core Animation
一. CALayer (一). CALayer简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比方一个button.一个文本标签.一个文本输入框.一个图标等等.这些都是UIView ...
随机推荐
- nginx将http重定向到https
1.rewrite server { listen 80; server_name test.com; rewrite ^(.*)$ https://$host$1 permanent; } 2. n ...
- 委派RODC管理员
将某个普通域用户(或组)委派为RODC管理员:
- Android——设计原则(Design Principles)
Enchant Me Delight me in surprising ways(动画.音效...) Real objects are more fun than buttons and menus( ...
- Codeforces Gym 100342C Problem C. Painting Cottages 暴力
Problem C. Painting CottagesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1 ...
- Codeforces Gym 100286G Giant Screen 水题
Problem G.Giant ScreenTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/con ...
- 使用sql生成UUID
在SQLServer中使用该sql语句可以生成GUID:select cast(NEWID() as varchar(36)) as uuid 通过一下语句将GUID中的'-'字符去掉: select ...
- 3款强大的BootStrap的可视化制作工具推荐
http://www.25xt.com/html5css3/7342.html 25学堂看到最近很多朋友在学习Bootstrap前端主题框架.顾让25学堂的小编给大家找来了3款适合Bootstrap初 ...
- [AngularJS] Isolate State Mutations in Angular Components
Managing state is one of the hardest things to do in any application. Angular 2 tackles this problem ...
- 关于try...catch...finally中return的疑惑
原文:http://www.cnblogs.com/and_he/archive/2012/04/17/2453703.html 关于try...catch...finally里面的return一直是 ...
- Apache以及PHP的默认编码问题解决(详解)
如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312.对于新手而且是只用GB2312编码的开发人来说, ...