view中frame和bounds的区别

view的bounds默认的都为(0,0,self.frame.size.width,self.frame.size.height)
view的位置是由view.frame决定的,而view.bounds决定的是其内子视图的原点。写个例子就明白了

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     self.view.backgroundColor = [UIColor lightGrayColor];
 4     [self setupAllBack];
 5 }
 6 
 7 -(void)setupAllBack{
 8     UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];
 9     view1.bounds = CGRectMake(-20, -20, 280, 250);
10     view1.backgroundColor = [UIColor redColor];
11     [self.view addSubview:view1];//添加到self.view
12     NSLog(@"view1 frame:%@========view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));
13     
14     UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
15     view2.backgroundColor = [UIColor brownColor];
16     [view1 addSubview:view2];//添加到view1上,此时view1坐标系左上角起点为(-20,-20)
17     NSLog(@"view2 frame:%@========view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));
18 }

打印结果为:
2015-07-21 13:23:20.941 Demo-frame和bounds区别[2147:87996] view1 frame:{{20, 20}, {280, 250}}========view1 bounds:{{-20, -20}, {280, 250}}
2015-07-21 13:23:20.942 Demo-frame和bounds区别[2147:87996] view2 frame:{{0, 0}, {100, 100}}========view2 bounds:{{0, 0}, {100, 100}}

上边demo的图示如下:

因为view2是在view1上的原点(0,0)处开始绘制的,而view1的原点为(-20,-20),所以view2要向下、向右分别移动20单位,才符合view2的要求。

转载于:https://www.cnblogs.com/Apologize/p/4680508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在iOS的画画窗口添加自定义视图,您需要按照以下步骤进行操作: 1.创建一个自定义视图,继承自UIView类。 2.在需要使用画画功能的UIViewController,添加以下代码以启用画画: ```swift override func viewDidLoad() { super.viewDidLoad() // 允许画self.isModalInPresentation = true } ``` 3.在需要添加自定义视图的UIViewController,创建一个AVPlayerViewController实例,并将其添加到视图层次结构: ```swift // 创建一个AVPlayerViewController实例 let playerViewController = AVPlayerViewController() // 添加到视图层次结构 addChild(playerViewController) view.addSubview(playerViewController.view) playerViewController.didMove(toParent: self) ``` 4.在AVPlayerViewController实例,使用AVPictureInPictureController的`playerViewController(_:restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:)`方法,在画画结束后恢复自定义视图: ```swift // 在画画结束后恢复自定义视图 func playerViewController(_ playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) { // 创建自定义视图 let customView = CustomView(frame: playerViewController.view.bounds) // 添加到视图层次结构 playerViewController.view.addSubview(customView) playerViewController.view.bringSubviewToFront(customView) completionHandler(true) } ``` 请注意,您需要在info.plist文件添加“Supported external accessory protocols”键,并将其设置为“com.apple.avfoundation.tunnel”的值,以便在iOS 14及更高版本启用画画功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值