CGAffine转换并缩放到图像的中心

时间:2012-12-04 15:28:09

标签: iphone ios scaling cgaffinetransform

我开始使用iPhone and iPad apps for Absolute Beginners by Rory Lewis书开始研究objective-c,但我被困在第5章。

我想创建一个缩小图像的按钮。
我的问题是,在我写完所有代码后,图像缩小到UIImageView(左上角)的点(0,0),而在视频中,图像缩小到其中心。我做了一些研究,发现CGAffineTransform使用对象的中心进行翻译,旋转等。

那为什么它在我的情况下不起作用?

我有最新的Xcode版本并没有做任何奇怪的事情。 我希望我已经清楚了。抱歉我的英文。

修改 对不起代码,但我从手机上写了这个问题。 无论如何,有罪的部分都是这样的

- (IBAction)shrink:(id)sender {

if(hasShrink == NO){
    [shrinkButton setTitle:@"Grow" forState:UIControlStateNormal];
}
else if(hasShrink == YES){
    [shrinkButton setTitle:@"Shrink" forState:UIControlStateNormal];
}
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1.0];
        myIcon.transform = CGAffineTransformMakeScale(.25, .25);
        hasShrink = YES;
        [UIView commitAnimations];

}

所有动画都是正确编写的,应用确实有效,它只是缩小到左上角。为什么默认情况下这个点没有像UIImageView一样设置在中心?

修改 我发现这是由AutoLayout引起的问题。 一旦禁用,一切顺利;)

3 个答案:

答案 0 :(得分:9)

如果要转换由自动布局管理的视图 mangled ,您可能会遇到一些奇怪的副作用。 See this answer for more details.

我最终采用的解决方案是封装我想在另一个完全相同大小的视图内转换的视图。外部视图应用了适当的布局约束,而内部视图只是在其容器中居中。将CGAffineTransform比例变换应用于内部视图现在可以正确居中。

答案 1 :(得分:8)

老问题......但是以防其他人来看:

CGAffineTransform围绕一个anchorPoint行动(旋转,缩放)。

如果要调整为0,0,则将锚点设置为0,0。如果要将其大小设置为不同的点(例如图像的中心),则需要更改锚点。 / p>

锚是图层的一部分

因此,如果你有一个名为UIImageView的{​​{1}},你可以拨打这样的电话,将锚点设置为imageview的中心:

imageview

答案 2 :(得分:7)

尝试这样的事情:

CGAffineTransform t = CGAffineTransformMakeScale(0.5, 0.5);
CGPoint center = imageView.center; // or any point you want
[UIView animateWithDuration:0.5
                 animations:^{
                    imageView.transform = t;
                    imageView.center = center;
                 }
                 completion:^(BOOL finished) {
                    /* do something next */
                 }];

下次显示您的代码。它会更容易帮助你。

检查此项目:https://github.com/djromero/StackOverflow/archive/Q-13706255.zip

您必须研究自动布局和自动调整大小如何影响您的观看次数。在上面的项目中,两者都被禁用,以便您了解它是如何工作的。