CGAffineTransformScale中的锚点问题

时间:2014-09-03 19:28:47

标签: ios objective-c uibutton

我试图让UIButton扩展但保持在原来的中心位置,并且我用CGAffineTransformScale获得了令人费解的结果。

这是我的UIButton子类中的函数:

-(void)shrink {
    self.transform = CGAffineTransformMakeScale(0.9,0.9);
}

使用此代码,按钮会缩放到左上角,但是当我添加代码以尝试设置定位点(以下任一行)时,该按钮会在屏幕上重新定位:

[self.layer setAnchorPoint:CGPointMake(self.frame.size.width/2, self.frame.size.height/2)];
//same result if I use bounds instead of frame
[self.layer setAnchorPoint:self.center];

有趣的是,这条线导致视图向下移动一段距离:

[self.layer setAnchorPoint:CGPointMake(0, 0)];

很抱歉,我知道这个主题已有很多帖子,但我老老实实地阅读并试过至少十几个,但仍然无法让这个工作。我可能只是错过了一些非常简单的东西。

1 个答案:

答案 0 :(得分:0)

默认锚点为0.5,0.5。这就是为什么将其设置为0,0将视图向下移动到右边。此外,如果您不希望中心移动,则需要在缩放后重新调整中心。

收缩后再调整它的位置。

-(void)shrink {
    CGPoint centerPoint = self.center;
    self.transform = CGAffineTransformMakeScale(0.9,0.9);
    self.center = centerPoint;
}