iOS 核心动画Core Animation
来源:互联网 发布:linux蓝牙传命令 编辑:程序博客网 时间:2024/06/06 02:08
#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>//这个包也可以不用导入
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
{
UIView *view2;
}
//@property (nonatomic,strong)UIView *containerView;
@end
@implementation ViewController
-(CALayer *)faceWithTransform:(CATransform3D)transform{
CALayer *face=[CALayerlayer];
face.frame=CGRectMake(-50,-50, 100, 100);
CGFloat red = (rand()/(double)INT_MAX);
CGFloat green=(rand()/(double)INT_MAX);
CGFloat blue=(rand()/(double)INT_MAX);
face.backgroundColor=[UIColorcolorWithRed:red green:green blue:bluealpha:1].CGColor;
face.transform=transform;
return face;
}
-(CALayer *)cubeWithTransform:(CATransform3D)transform{
CATransformLayer *cube =[CATransformLayerlayer];
//添加立方体的一个面
CATransform3D ct =CATransform3DMakeTranslation(0, 0, 50);//参数1:x轴偏移位置,往下为正。参数2:y轴偏移位置,往右为正。参数3:z轴偏移位置,往外为正数。
[cube addSublayer:[selffaceWithTransform:ct]];
//add cube face 2
ct = CATransform3DMakeTranslation(50, 0, 0);
ct = CATransform3DRotate(ct,M_PI_2, 0, 1, 0);
[cube addSublayer:[selffaceWithTransform:ct]];
//add cube face 3
ct = CATransform3DMakeTranslation(0, -50, 0);
ct = CATransform3DRotate(ct,M_PI_2, 1, 0, 0);
[cube addSublayer:[selffaceWithTransform:ct]];
//add cube face 4
ct = CATransform3DMakeTranslation(0, 50, 0);
ct = CATransform3DRotate(ct, -M_PI_2, 1, 0, 0);
[cube addSublayer:[selffaceWithTransform:ct]];
//add cube face 5
ct = CATransform3DMakeTranslation(-50, 0, 0);
ct = CATransform3DRotate(ct, -M_PI_2, 0, 1, 0);
[cube addSublayer:[selffaceWithTransform:ct]];
//add cube face 6
ct= CATransform3DMakeTranslation(0, 0, -50);
ct=CATransform3DRotate(ct,M_PI, 0, 1, 0);
[cube addSublayer:[selffaceWithTransform:ct]];
CGSize containerSize=view2.bounds.size;
cube.position=CGPointMake(containerSize.width/2.0, containerSize.height/2.0);
cube.transform = transform;
return cube;
}
- (void)viewDidLoad {
[superviewDidLoad];
//CAShapeLayer属性是CGPathRef类型,但是我们用UIBezierPath帮助类创建了图层路径,这样我们就不用考虑释放CGPath了。
UIBezierPath *path=[[UIBezierPathalloc]init];
// [path moveToPoint:CGPointMake(175, 100)];
[path addArcWithCenter:CGPointMake(150, 100)radius:25 startAngle:0endAngle:2*M_PIclockwise:YES ];
[path moveToPoint:CGPointMake(150, 125)];
[path addLineToPoint:CGPointMake(150, 175)];
[path addLineToPoint:CGPointMake(125, 225)];//左脚
[path moveToPoint:CGPointMake(150, 175)];
[path addLineToPoint:CGPointMake(175, 225)];//右脚
[path moveToPoint:CGPointMake(100, 150)];
[path addLineToPoint:CGPointMake(200, 150)];//胳膊
//create shape layer
CAShapeLayer *shapeLayer=[CAShapeLayerlayer];
shapeLayer.strokeColor=[UIColorredColor].CGColor;
shapeLayer.fillColor=[UIColorclearColor].CGColor;
shapeLayer.lineWidth=5;
shapeLayer.lineJoin=kCALineJoinRound;
shapeLayer.lineCap=kCALineCapRound;
shapeLayer.path=path.CGPath;
[self.view.layeraddSublayer:shapeLayer];
CGRect rect =CGRectMake(50, 200, 100, 100);
CGSize radii=CGSizeMake(20, 20);
UIRectCorner corners =UIRectCornerTopRight | UIRectCornerTopLeft |UIRectCornerBottomRight;
UIBezierPath *path2=[UIBezierPathbezierPathWithRoundedRect:rectbyRoundingCorners:cornerscornerRadii:radii];
CAShapeLayer *shapeLayer2=[CAShapeLayerlayer];
shapeLayer2.borderWidth=2;
shapeLayer2.strokeColor=[UIColorredColor].CGColor;
shapeLayer2.fillColor=[UIColorclearColor].CGColor;
shapeLayer2.path=path2.CGPath;
[self.view.layeraddSublayer:shapeLayer2];
//create a text layer
UIView *view=[[UIViewalloc]init];
view.backgroundColor=[UIColoryellowColor];
view.frame=CGRectMake(10, 400, 100, 100);
[self.viewaddSubview:view];
CATextLayer *textlayer=[CATextLayerlayer];
textlayer.frame=view.bounds;
[view.layeraddSublayer:textlayer];
textlayer.foregroundColor=[UIColorblackColor].CGColor;
textlayer.alignmentMode=kCAAlignmentJustified;
textlayer.wrapped=YES;
textlayer.contentsScale=[UIScreenmainScreen].scale;
UIFont *font=[UIFontsystemFontOfSize:15];
CFStringRef fontName=(__bridgeCFStringRef)(font.fontName);
CGFontRef fontRef =CGFontCreateWithFontName(fontName);
textlayer.font=fontRef;
textlayer.fontSize=font.pointSize;
CGFontRelease(fontRef);
NSString *str=@"asjfh是发生地啊快减肥大法肯定会噶好快回归哈哈个很好jjjhg";
textlayer.string = str;
//CATransformLayer
//CATransformLayer不同于普通的CALayer,因为它不能显示它自己的内容。只有当存在了一个能作用于子图层的变换它才真正存在。CATransformLayer并不平面化它的子图层,所以它能够用于构造一个层级的3D结构。
view2=[[UIViewalloc]init];
view2.frame=CGRectMake(150, 300, 200, 200);
view2.backgroundColor=[UIColorwhiteColor];
[self.viewaddSubview:view2];
CATransform3D pt =CATransform3DIdentity;
pt.m34 = -1.0/500.0;//m34= -1/D, 默认值是0,所谓的D,是eye(观察者)到投射面的距离。
view2.layer.sublayerTransform=pt;
CATransform3D c1t =CATransform3DIdentity;
c1t=CATransform3DTranslate(c1t, -150, 0, 0);
CALayer *cube1=[selfcubeWithTransform:c1t];
[view2.layeraddSublayer:cube1];
CATransform3D c2t =CATransform3DIdentity;
c2t = CATransform3DTranslate(c2t, 30, 0, 0);//参数1:用于本身实现叠加效果。参数2:用于x轴偏移位置,往下为正数。参数3:用于z轴偏移位置,往外是正数,值越大这个图层就越往外(接近屏幕)
c2t = CATransform3DRotate(c2t, -M_PI_4, 1, 0, 0);//参数1:用于本身实现叠加效果。参数2:旋转的弧度。参数3:向x轴方向旋转。值范围-1-》1之间。参数4:y轴方向旋转。参数5:z轴方向旋转.
c2t = CATransform3DRotate(c2t, -M_PI_4, 0, 1, 0);//效果可叠加
CALayer *cube2 = [selfcubeWithTransform:c2t];
[view2.layeraddSublayer:cube2];
//CAGradientLayer
//CAGradientLayer是用来生成两种或更多颜色平滑渐变的。CAGradientLayer的真正好处在于绘制使用了硬件加速。
CAGradientLayer *gradientLayer = [CAGradientLayerlayer];
gradientLayer.frame=view2.bounds;
[view2.layeraddSublayer:gradientLayer];
gradientLayer.colors=@[(__bridgeid)[UIColorredColor].CGColor,(__bridgeid)[UIColorblueColor].CGColor];
gradientLayer.startPoint=CGPointMake(0, 0);
gradientLayer.endPoint=CGPointMake(1, 1);
//多重渐变
//locations数组并不是强制要求的,但是如果你给它赋值了就一定要确保locations的数组大小和colors数组大小相同。
CAGradientLayer *gradientLayer2=[CAGradientLayerlayer];
gradientLayer2.frame =self.view.bounds;
[self.view.layeraddSublayer:gradientLayer2];
gradientLayer2.colors=@[(__bridgeid)[UIColorredColor].CGColor,(__bridgeid)[UIColorgreenColor].CGColor,(__bridgeid)[UIColoryellowColor].CGColor];
gradientLayer2.locations=@[@0.0,@0.25,@0.5];//表示红色从0.0%(该处为纯红)开始渐变直到25%(在该处颜色为纯绿),然后从%25到%50进行渐变(50%该处颜色为纯黄)
gradientLayer2.startPoint=CGPointMake(0, 0);
gradientLayer2.endPoint=CGPointMake(1, 1);
//AVPlayerLayer是用来在iOS上播放视频的。
UIView *view3=[[UIViewalloc]init];
view3.frame=CGRectMake(0, 0, 200, 200);
view3.backgroundColor=[UIColorredColor];
[self.viewaddSubview:view3];
NSURL *url=[[NSBundlemainBundle]URLForResource:@"video"withExtension:@"mp4"];
AVPlayer *player = [AVPlayerplayerWithURL:url];
AVPlayerLayer *playerLayer=[AVPlayerLayerplayerLayerWithPlayer:player];
playerLayer.frame=view3.bounds;
[view3.layeraddSublayer:playerLayer];
CATransform3D transform=CATransform3DIdentity;
transform.m34 = -1.0/500.0;
transform =CATransform3DRotate(transform,M_PI_4, 1, 1,0);
playerLayer.transform=transform;
playerLayer.masksToBounds =YES;
playerLayer.cornerRadius=20.0;
playerLayer.borderColor=[UIColorblueColor].CGColor;
playerLayer.borderWidth=5.0;
[player play];
}
- IOS核心动画 - Core Animation
- iOS-Core Animation 核心动画
- IOS核心动画(Core Animation)
- iOS Core Animation 核心动画
- iOS 核心动画Core Animation
- iOS开发中的核心动画-Core Animation-
- iOS开发 - Core Animation 核心动画
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发笔记>> Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- iOS Core Animation(核心动画)
- iOS开发基础知识:Core Animation(核心动画)
- 文件/目录管理(2)---dup()/dup2()/lseek()/fcntl()
- UITableView:下拉刷新和上拉加载更多
- POI 中的CellRangeAddress 参数
- Android StatusBar增加图标
- Java 序列化Serializable详解(转载)
- iOS 核心动画Core Animation
- C++中编译器必须为未申明constructor的class合成一个default constructor的几种情况
- Android 常用工具类源码大全
- vim
- 基于ACE模板适度精简优化的后台管理模板
- i2c 和 spi 单次传输大小
- iOS 微信右上角下拉菜单效果之CMPopTipView,各种角度各种位置
- 关于如何做好一个规律、科学、有效率的生活计划(模块化生活)
- 驱动编程中注意的事项