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

我开始使用Rory Lewis书中的绝对初学者的iPhone和iPad应用程序来学习Objective-C,但是我陷入了第5章。

我想制作缩小图像的button。
我的问题是,在我写完所有代码后,图像缩小到UIImageView(左上angular)的点(0,0),而在video中图像收缩到中心。 我做了一些研究,发现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]; 

}

所有的animation都是正确的书面和应用程序的工作,它只是缩小到左上angular。 为什么这个点在默认情况下不会被设置为UIImageView的中心?

编辑:我想通了这是由AutoLayout引起的问题。 一旦停用,一切顺利;)

如果您正在改变自动布局pipe理的视图,则可能会遇到一些奇怪的副作用。 看到这个答案的更多细节。

我最终采用的解决scheme是将我想要转换的视图封装在完全相同大小的另一个视图中。 外部视图具有适当的布局约束,而内部视图仅在其容器中居中。 现在将CGAffineTransform缩放比例转换为内部视图。

老问题…但以防万一别人来看看:

CGAffineTransform在anchorPoint周围起作用(旋转,缩放)。

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

锚是一个层的一部分

所以如果你有一个名为imageviewUIImageView ,你可以像这样调用锚点到imageview的中心:

 [imageview.layer setAnchorPoint:CGPointMake(0.5, 0.5)]; 

尝试这样的事情:

 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

你必须研究自动布局和自动调整如何影响你的观点。 在上面的项目中都禁用,让你看看它是如何工作的。