ios - convertRect:view.frame toView:window x 异常翻倍?
PHP中文网
PHP中文网 2017-04-17 17:37:42
[iOS讨论组]
    UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
    NSLog(@"window.f %@", NSStringFromCGRect(window.frame));
    CGRect newFrame = [view convertRect:view.frame toView:window]; 
    NSLog(@"原始:%@ 转换:%@", NSStringFromCGRect(view.frame), NSStringFromCGRect(newFrame));

window.f {{0, 0}, {320, 480}}
原始:{{85, 7}, {150, 30}} 转换:{{170, 34}, {150, 30}}

为什么 x 被翻倍了?
View 为灰色控件

如果将控件放到view 中

2016-03-07 02:39:25.662 微博2期[57203:938330] window.f {{0, 0}, {320,
480}} 2016-03-07 02:39:25.662 微博2期[57203:938330] 原始:{{20, 60}, {40,
20}} 转换:{{40, 184}, {40, 20}}

得到以上数据。。。184 - 64 正好 120,也就是说x * 2, y * 2 了

将控件添加到一个视图中,相对于视图转换(这个比较难说明白,简单说就是排除了各种bar的干扰)结果直接x y 都双倍了。。。

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
ringa_lee

两种正确写法

[view.superview convertRect:view.frame  toView:nil];
[view           convertRect:view.bounds toView:window];

对convertRect 调用者理解有误,应该是需要转换控件的参考系视图,而不是自身。

大家讲道理

[view convertRect:view.frame toView:window] -> [view convertRect:view.frame toView:nil]
改成这样的就不会存在题主的描述的现象。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号