gpt4 book ai didi

ios - Objective-c 控制变换旋转

转载 作者:行者123 更新时间:2023-11-29 04:09:57 25 4
gpt4 key购买 nike

我有一个图像网格,我可以通过单击图像来放大和缩小。一切工作正常,但我在控制 CGAffineTransform 的旋转时遇到问题。我以为我可以传入角度来控制如何确定旋转,但是当我这样做时,变换不会放大,而我会缩小。
我觉得我在创建例程的过程中错过了在某个地方正确实现这一点,所以如果有人能指出我出错的地方,我将不胜感激这是我的代码

     float angle =  -1.661799;

if(status == 0){
[UIView animateWithDuration:1.5f delay:0.0f
options:UIViewAnimationOptionCurveEaseIn animations:^{
CGAffineTransform totalTransform =
CGAffineTransformMakeTranslation(-middleX , -middleY );
totalTransform = CGAffineTransformScale(totalTransform, 3.5f, 3.5f);
totalTransform = CGAffineTransformTranslate(totalTransform, middleX , middleY );
//totalTransform = CGAffineTransformMakeRotation(angle);
[self.view setTransform:totalTransform];
}completion:^(BOOL finished) {
}];
status++;
}else{
[UIView animateWithDuration:1.3f delay:0.0f
options:UIViewAnimationOptionCurveEaseIn animations:^{

CGAffineTransform tr = CGAffineTransformMakeScale(1.00 ,1.00);
[self.view setTransform:tr];
}completion:^(BOOL finished) {

[UIView animateWithDuration:1.3f delay:0.0f
options:UIViewAnimationOptionCurveEaseIn animations:^{
CGAffineTransform totalTransform =
CGAffineTransformMakeTranslation(-middleX , -middleY );
totalTransform = CGAffineTransformScale(totalTransform, 3.5f, 3.5f);
totalTransform = CGAffineTransformTranslate(totalTransform, middleX , middleY );
//totalTransform = CGAffineTransformMakeRotation(angle);
[self.view setTransform:totalTransform];
}completion:^(BOOL finished) {}];

}];
status = 0;
}

最佳答案

这是一个老问题 - 但万一有人回到这个问题:

当您进行一系列转换时,您需要使用正确的调用。每种类型的变换(旋转、平移、缩放)都有两个调用。一个用于变换的组合,另一个用于进行新的变换。

第一个调用可以是“调用”调用。随后的调用必须是非 make 类型。

“Make”调用,生成一个变换矩阵:

CGAffineTransformMakeRotation(angle)

非 make 调用,修改现有的转换矩阵:

CGAffineTransformRotate(existingMatrix, angle)

所以,从你的代码来看:

CGAffineTransform totalTransform = 
CGAffineTransformMakeTranslation(-middleX , -middleY );
totalTransform = CGAffineTransformScale(totalTransform, 3.5f, 3.5f);
totalTransform = CGAffineTransformTranslate(totalTransform, middleX , middleY );
totalTransform = CGAffineTransformMakeRotation(angle);

您的第一次调用创建了一个合适的矩阵。但是,您的轮换调用(第四次调用)应该是:

 totalTransform = CGAffineTransformRotate(totalTransform, angle);

否则,正如您所注意到的,您将丢弃该调用之前的所有转换,并且仅获得旋转(在本例中),或者无论您最后一次转换是什么。

关于ios - Objective-c 控制变换旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com