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];

    

    

}


0 0
原创粉丝点击