【问题标题】:question about CGAffineTransformTranslate关于 CGAffineTransformTranslate 的问题
【发布时间】:2010-04-12 06:17:53
【问题描述】:
CGRect rect1 = backgroundImageView.frame;
NSLog(@"%f,%f,%f,%f",rect1.origin.x,rect1.origin.y,
                     rect1.size.width,rect1.size.height);

angle = -90.0;
moveX = 0;
moveY = 0.0;

CGFloat degreesToRadians = M_PI * angle / 180.0;
CGAffineTransform landscapeTransform =
      CGAffineTransformMakeRotation(degreesToRadians);
landscapeTransform =
      CGAffineTransformTranslate(landscapeTransform, moveX, moveY);
[backgroundImageView setTransform:landscapeTransform]; 

rect1 = backgroundImageView.frame;
NSLog(@"%f,%f,%f,%f",rect1.origin.x,rect1.origin.y,
                     rect1.size.width,rect1.size.height);

调试信息输出:

0.000000,0.000000,320.000000,480.000000
-80.000000,80.000000,480.000000,320.000000

为什么 (x,y) 会变成 (-80,80)?

【问题讨论】:

  • 为什么要在每个轴上将原点平移零点?那没有任何作用。 (即使您认为 CGAffineTransformTranslate 转换为 那一点,但它没有,那仍然不会做任何事情:翻译移动原点,而 0,0 原点,因此转换为 0,0 会将原点移动到原点。这也不会做任何事情。)

标签: cocoa cocoa-touch core-graphics


【解决方案1】:

设置变换时,backgroundImageView.center 不会改变。如果父视图已经旋转,您可以在应用变换后执行类似的操作。

backgroundImageView.center = backgroundImageView.superview.center;

无论哪种方式,为了您的目的,您都应该调整中心而不是平移变换。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2011-09-22
    • 2018-05-23
    • 2011-11-16
    • 2021-03-27
    • 2017-01-27
    • 2011-10-31
    • 2011-01-19
    • 2011-07-20
    相关资源
    最近更新 更多