CGAffineTransform和缩放到图像的中心(CGAffineTransform and s

2019-07-04 12:37发布

我开始学习使用Objective-C的绝对初学者iPhone和iPad应用程序由罗里·刘易斯的书,但我被困在第5章。

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

那么,为什么它没有我的情况下工作吗?

我有最新版本的Xcode和有没有做过什么奇怪的。 我希望我已经清楚了。 对不起我的英语不好。

EDIT很抱歉的代码,但我从我的电话写的问题。 但无论如何,牵连的部分是这样的

- (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的中心像它应该是什么?

编辑:我想通了,这是造成自动版式的问题。 一旦停用一切都很顺利;)

Answer 1:

如果您要变换错位的自动布局管理的观点,你可能会遇到一些奇怪的副作用。 看到这个答案的更多细节。

我最终采用的解决方案是封装我想大小完全相同的另一种视图中进行改造的看法。 外视图有施加到其相应的布局约束,而内有人在其容器简单地居中。 应用CGAffineTransform尺度变换到内部视图现在中心正常。



Answer 2:

老问题...但以防万一别人上门找:

所述CGAffineTransform作用(旋转,缩放)围绕anchorPoint。

如果您在上浆0,0,那么你的定位点是,如果你想让它的大小,以不同的角度设置为0,0,如图像的中心,您需要更改的锚点。

所述锚定件是一个层的一部分

所以,如果你有一个UIImageView叫做imageview ,你会作出这样的调用设置锚的ImageView的中心:

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


Answer 3:

尝试是这样的:

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

你必须学习自动布局和自动调整如何影响你的观点。 在上述两个项目被禁用,让你看到它是如何工作的。



文章来源: CGAffineTransform and scaling to center of the image