图层
drawRect
:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示 @property(nonatomic,readonly,retain) CALayer *layer;
- UIView之所以能够显示,完全是因为内部的CALayer对象。因此,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色
等。
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.UIView * redView = [[UIView alloc]init];redView.frame = CGRectMake(100 , 100, 100, 100);redView.backgroundColor = [UIColor redColor];[self.view addSubview:redView];#pragma mark 常用的属性
//----- 1 边框的大小redView.layer.borderWidth = 10;
// 边框的颜色 CGColor是为了把 OC 的颜色转化为 c 的颜色redView.layer.borderColor = [UIColor yellowColor].CGColor;//----- 2 阴影
// 偏移量redView.layer.shadowOffset = CGSizeMake(50, 50);
// 颜色redView.layer.shadowColor = [UIColor blueColor].CGColor;
// 透明度(如果要显示就一定要加)redView.layer.shadowOpacity = 1;
// 阴影的圆角半径redView.layer.shadowRadius = 50;//----- 3 圆角Radius = 50;redView.layer.masksToBounds = YES;//----- 4 boundsredView.layer.bounds = CGRectMake(0, 0, 200, 200);
//----- 5 postion 属性和 的关系 默认是相等的redView.layer.position = CGPointMake(100, 100);// 6 设置内容(图片)ts = (__bridge id _Nullable)([UIImage imageNamed:@"1.jpg"].CGImage);
- (void)viewDidLoad {[super viewDidLoad];CALayer *layer = [CALayer layer];
// 设置大小layer.bounds = CGRectMake(0, 0, 100, 100);
// 设置宽高layer.position = CGPointMake(100, 100);
// 设置颜色layer.backgroundColor = [UIColor brownColor].CGColor;
// 透明度layer.opacity = Layel = layer;[self.view.layer addSublayer:layer];#pragma mark 这里创建的相当于一张白纸上面涂红了 上一个则是穿件了两张纸}// 隐式动画
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {// 获取触摸对象UITouch * t = touches.anyObject;
// 获取当前的点的位置CGPoint p = [t locationInView:t.view];
// 设置红色的 layer 跑到手指的位置上Layel.position = p;
// 带有Animatable 这个就是可动画属性 改了可动画属性系统自动给添加的动画就是隐式动画Layel.bounds =CGRectMake(100, 100, 200, 200);
## 控件根layer 是没有隐式动画的
}
// 开启事务[CATransaction begin];
// 禁用隐士动画[CATransaction setDisableActions:YES];// 设置红色的 layer 跑到手指的位置上Layel.position = p;
// 提交事务[CATransaction commit];
#import "ViewController.h"@interface ViewController ()
/**<#描述#>*/
@property (nonatomic,weak) CALayer *myLayer;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];CALayer *layer = [CALayer layer];// 设置大小layer.bounds = CGRectMake(0, 0, 100, 100);// 设置宽高layer.position = CGPointMake(100, 100);// 设置颜色layer.backgroundColor = [UIColor brownColor].CGColor;// 透明度layer.opacity = 1;//ts = (__bridge id _Nullable)([UIImage imageNamed:@"1.jpg"].CGImage);[self.view.layer addSublayer:layer];Layer = layer;}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {// affineTransform = ui里面的 transform// 旋转 角度 和 x y z 轴
#pragma mark CATransform3DRotate 和 CATransform3DMakeRotation 前者是对于自身的基础上 另个一是转到多少度ansform = ansform, M_PI_4, 0, 0, 1);
// 缩放ansform = ansform, 0.5, 1, 1);// 平移ansform = ansform, 5, 5,1 );
#import "ViewController.h"@interface ViewController ()/**<#描述#>*/
@property (nonatomic,strong) CALayer *myLayer;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor cyanColor];// 创建表盘CALayer *clock = [[CALayer alloc]init];
// 大小clock.bounds = CGRectMake(0, 0, 200, 200);
// 位置clock.position = CGPointMake(200, 200);
// 设置图片ts = (__bridge id _Nullable)([UIImage imageNamed:@"1.jpg"].CGImage);Radius = 100;clock.masksToBounds = YES;
// 创建一个秒针CALayer *second = [[CALayer alloc]init];second.bounds = CGRectMake(0, 0, 2, 60);second.position = clock.position;second.backgroundColor = [UIColor redColor].CGColor;
#pragma mark 新的属性 锚点 定位点// 取值范围是从0到1的second.anchorPoint = CGPointMake(0.5, 1);// 添加到控制器 view 的根 layer 上[self.view.layer addSublayer:clock];[self.view.layer addSublayer:second];// 添加计时器[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];Layer = second;
}//计时器的方法 1秒执行一个
- (void)timeChange {// 1 通过 NSDate 获取当前的时间NSDate * date= [NSDate date];
// 2 格式化时间的对象NSDateFormatter * formatter = [NSDateFormatter new];
//formatter.dateFormat = @"ss";
//NSString * seconde = [formatter stringFromDate:date];
//CGFloat secondF = [seconde floatValue];NSLog(@"%f",secondF);// 一秒钟的度数CGFloat angle = 2 * M_PI / 60;
// 应该转到的角度angle = angle * secondF;
// 旋转Layer.affineTransform = CGAffineTransformMakeRotation(angle);}
本文发布于:2024-01-28 11:13:34,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064116187020.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |