iOS开发——frame和bounds详解

       在iOS的UI开发中,frame和bounds是两个非常容易搞混的概念,而很多开发者在实际项目中也很少去区分,因此会导致出现一些意想不到的问题。本篇博客以实际代码的方式来学习frame和bounds的使用。相关示例代码上传至 https://github.com/chenyufeng1991/FrameAndBounds ,欢迎大家下载查看。

(1)先来查看一个界面中的容器self.view的frame和bounds的打印结果:下面的运行结果都在iPhone5s模拟器下进行。

 NSLog(@"self.view.frame = %@",NSStringFromCGRect(self.view.frame));
 NSLog(@"self.view.bounds = %@",NSStringFromCGRect(self.view.bounds));

在这里我们可以看到,self.view的frame和bounds是一样的。原点都是在左上角。长宽正好是整个屏幕的宽高。


(2)frame和bounds难道都是一样的吗?当然不是。现在我们对一个View做一个旋转动画。

    UIView *view01 = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 50, 50)];
    view01.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view01];
    NSLog(@"view01.frame = %@",NSStringFromCGRect(view01.frame));
    NSLog(@"view01.bounds = %@",NSStringFromCGRect(view01.bounds));

    [UIView transitionWithView:view01 duration:2 options:0 animations:^{
        view01.transform = CGAffineTransformMakeRotation(M_PI_4);
    } completion:^(BOOL finished) {
        if (finished)
        {
            NSLog(@"view01.frame = %@",NSStringFromCGRect(view01.frame));
            NSLog(@"view01.bounds = %@",NSStringFromCGRect(view01.bounds));
        }
    }];
动画效果如下:

我们让一个正方形旋转90度,在动画开始前和结束后分别打印frame和bounds,打印结果如下:

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值