繁体   English   中英

将多个变换应用于UIView / CALayer

[英]Applying multiple transforms to a UIView / CALayer

将多个变换应用于UIView并且它是相应的CALayer是否有任何问题?

具体来说,您是否可以“混合和匹配”CATransform3D与CGAffineTransforms而不会遇到问题?

在动画另一个变换同时动画时,是否还有直接设置变换的问题?

是否有任何“规则”应该如何做,或任何设计模式?

我意识到这并不能完全回答(或接近),但如果你只使用CGAffineTransforms,你可以使用CGAffineTransformConcat()来组合多个变换。

只要你正确地连接转换,当一些变换被动画而其他变换没有动画时,这将正常工作。 当你也进行层变换时,我不知道这是如何工作的。

pix0r是对的,但这里有更多信息。 CGAffineTransformConcat()的官方文档

另外,这是一个简单的例子:

// Rotate 45 degrees
CGAffineTransform rotate = CGAffineTransformMakeRotation(45*(M_PI/180));
// Move to the left
CGAffineTransform translate = CGAffineTransformMakeTranslation(-50,0);
// Apply them to a view
self.view.transform = CGAffineTransformConcat(translate, rotate);

使用Swift 3和4语法略有改变。@ whitehawk的答案适应:

// Rotate 45 degrees
var rotate = CGAffineTransform(rotationAngle: 45 * (.pi / 180))
// Move to the left
var translate = CGAffineTransform(translationX: -50, y: 0)
// Apply them to a view
self.view.transform = translate.concatenating(rotate)

我成功地在同一时间翻译和旋转imageView,这样:

float scaleFactor_x   = 2.8;
float scaleFactor_y   = 2.45;
imgBigBallBasic.frame = CGRectMake(112, 20, 100, 100);
CGAffineTransform scaleTrans  = CGAffineTransformMakeScale(scaleFactor_x, scaleFactor_y);
CGAffineTransform translateTrans  = CGAffineTransformMakeTranslation(0, 55);
imgBigBallBasic.contentMode = UIViewContentModeScaleAspectFit;
imgBigBallBasic.transform = CGAffineTransformConcat(translateTrans, scaleTrans);
imgBigBallBasic.frame = CGRectMake(112, 20, 100, 100);
imgBigBallBasic.center = [[imgBigBallBasic window] center];
[UIView commitAnimations];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM