oc 控件视图旋转以及frame的变化

这篇博客探讨了在iOS中,当一个UIView被点击后执行45度旋转时,其frame如何随之变化。作者提出了观点,认为对View的transform操作实际上是作用于其layer,layer的变换影响了frame。通过实验验证,展示了旋转操作如何影响视图的frame。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有这样的的一个VIew


点击Button后进行45度的旋转。

两种方式都可以

    //self.view2.transform=CGAffineTransformMakeRotation(M_PI/6);
    //self.view2.layer.transform = CATransform3DMakeRotation(M_PI/4, 0, 0, 1);


围绕着默认的中心锚点旋转45度后,frame如何变化呢?

    NSLog(@"self.view2.frame - x - %f y -%f w -%f d -%f",self.view2.frame.origin.x,self.view2.frame.origin.y,self.view2.frame.size.width,self.view2.frame.size.height);
    
    //self.view2.transform=CGAffineTransformMakeRotation(M_PI/6);
    self.view2.layer.transform = CATransform3DMakeRotation(M_PI/4, 0, 0, 1);
    
    NSLog(@"self.view2.frame - x - %f y -%f w -%f d -%f",self.view2.frame.origin.x,self.view2.frame.origin.y,self.view2.frame.size.width,self.view2.frame.size.height);

结果为:

2016-05-26 15:04:48.490 test[37094:4422449] self.view2.frame - x - 40.000000 y -126.000000 w -180.000000 d -180.000000
2016-05-26 15:04:48.490 test[37094:4422449] self.view2.frame - x - 2.720779 y -88.720779 w -254.558441 d -254.558441




可以看到frame进行了相应角度变化,为什么呢?

   先进行猜测吧,对View进行transform,内部实现应该也是对相应的layer进行transform,layer的变化怎样影响frame呢?

   我认为应该是对layer旋转后,layer的frame发生变化,从而导致view的frame发生变化。

   做个相关实验

    NSLog(@"self.view2.frame - x - %f y -%f w -%f d -%f",self.view2.frame.origin.x,self.view2.frame.origin.y,self.view2.frame.size.width,self.view2.frame.size.height);
    
    NSLog(@"self.view2.layer.frame - x - %f y -%f w -%f d -%f",self.view2.layer.frame.origin.x,self.view2.layer.frame.origin.y,self.view2.layer.frame.size.width,self.view2.layer.frame.size.height);
    
    self.view2.layer.frame = CGRectMake(_view2.frame.origin.x + 80, _view2.frame.origin.y, self.view2.frame.size.width, self.view2.frame.size.height);
    
    NSLog(@"self.view2.layer.frame - x - %f y -%f w -%f d -%f",self.view2.layer.frame.origin.x,self.view2.layer.frame.origin.y,self.view2.layer.frame.size.width,self.view2.layer.frame.size.height);
    
    
    NSLog(@"self.view2.frame - x - %f y -%f w -%f d -%f",self.view2.frame.origin.x,self.view2.frame.origin.y,self.view2.frame.size.width,self.view2.frame.size.height);

结果为:

2016-05-26 14:55:30.767 test[37051:4416067] self.view2.frame - x - 40.000000 y -126.000000 w -180.000000 d -180.000000
2016-05-26 14:55:30.767 test[37051:4416067] self.view2.layer.frame - x - 40.000000 y -126.000000 w -180.000000 d -180.000000
2016-05-26 14:55:30.767 test[37051:4416067] self.view2.layer.frame - x - 120.000000 y -126.000000 w -180.000000 d -180.000000
2016-05-26 14:55:30.768 test[37051:4416067] self.view2.frame - x - 120.000000 y -126.000000 w -180.000000 d -180.000000



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值