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

hal*_*d17 9 iphone scaling cgaffinetransform ios

我开始使用Rory Lewis书中的Absolute BeginnersiPhone和iPad应用程序开始研究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];
Run Code Online (Sandbox Code Playgroud)

}

所有的动画都是正确编写的,应用程序确实有效,它只是缩小到左上角.为什么默认情况下该点未设置为UIImageView的中心?

编辑: 我发现这是一个由AutoLayout引起的问题.一旦禁用,一切顺利;)

dev*_*os1 9

如果您要变换视图错位的自动布局管理,您可能会遇到一些奇怪的副作用.有关详细信息,请参阅此答案.

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


Hal*_*alR 8

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

所述CGAffineTransform围绕anchorPoint行为(旋转,缩放).

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

锚是图层的一部分

所以,如果你有一个UIImageView被叫imageview,你可以像这样调用将锚点设置为imageview的中心:

[imageview.layer setAnchorPoint:CGPointMake(0.5, 0.5)];
Run Code Online (Sandbox Code Playgroud)

  • `anchorPoint`以相对值测量,默认为"0.5,0.5",这是视图的中心.使用像素值不会给您预期的结果. (4认同)

djr*_*ero 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 */
                 }];
Run Code Online (Sandbox Code Playgroud)

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

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

您必须研究autolayout和autoresize如何影响您的视图.在上面的项目中,两个都被禁用,以便您了解它是如何工作的.