首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGAffineTransform改变view.bounds?

CGAffineTransform改变view.bounds?
EN

Stack Overflow用户
提问于 2012-07-02 05:25:05
回答 1查看 6.7K关注 0票数 9

视图具有一个框架(superview的坐标系中的坐标)和B界(在自己的坐标系中的坐标)属性,但是如果您转换一个视图,就不应该再使用或依赖于frame属性了。如果您使用的是转换,则只使用边界属性,而不是框架属性,因为转换应用于边界,但不一定在框架中准确反映。

http://iphonedevelopment.blogspot.jp/2008/10/demystifying-cgaffinetransform.html

我想看看他在上一段中的意思,并印上“框架”和“界限”。

我只看到“框架”在紧要关头发生变化。

代码语言:javascript
复制
- (IBAction)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
    NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity);
    NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    NSLog(@"After, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));

    recognizer.scale = 1;
}

输出:(僵尸)

代码语言:javascript
复制
2012-07-02 14:53:51.458 GestureRec[1264:707] scale: 1.030111, velocity: 0.945660
2012-07-02 14:53:51.466 GestureRec[1264:707] Before, frame: {{0, 124}, {320, 160}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.473 GestureRec[1264:707] After, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.480 GestureRec[1264:707] scale: 1.074539, velocity: 1.889658
2012-07-02 14:53:51.484 GestureRec[1264:707] Before, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.494 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.499 GestureRec[1264:707] scale: 1.000000, velocity: 1.889658
2012-07-02 14:53:51.506 GestureRec[1264:707] Before, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.510 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}

我是误解了什么,还是博客里的作者错了?

EN

回答 1

Stack Overflow用户

发布于 2012-07-02 06:06:58

我想我知道了:

苹果本身报道,这个博客是正确的。

若要翻译或缩放坐标系,请更改视图的边界矩形.

但是,边界不会改变,因为矩形本身仍然与您报告的大小相同,只有坐标系统与其缩放。你看:

更改边界矩形将设置开始视图执行的所有绘图的基本坐标系。

因为我们从不显式地改变界限,所以只有视图的框架相对于它的superview变化。

事实上,我可以在数学上证明边界永远不变!在这里,运行以下示例:

代码语言:javascript
复制
NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity);
    NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    NSLog(@"After, frame: %@, bounds: %@ transform:%@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds), NSStringFromCGAffineTransform(recognizer.view.transform));

    recognizer.scale = 1;

现在,如果您注意到,从NSStringFromCGAffineTransform()报告的值乘以边界等于视图的框架。但是博客上说的话呢?不一定准确是对的。变换矩阵不仅适用于这个事物的x和y,如果我们真的想要的话,我们可以转换z值,旋转,翻转,所有这些都以非线性的方式改变框架属性,特别是在tandom中。

一个有趣的难题,如果我自己这么说的话。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11288143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档