Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 将NSImageView的CALayer旋转90度_Macos_Cocoa_Core Animation - Fatal编程技术网

Macos 将NSImageView的CALayer旋转90度

Macos 将NSImageView的CALayer旋转90度,macos,cocoa,core-animation,Macos,Cocoa,Core Animation,我正在尝试旋转NSImageView的CALayer。我的问题是,默认情况下,锚点看起来是(0.0,0.0),但我希望它是图像的中心(苹果的文档表明默认值应该是中心(0.5,0.5),但它不在我的系统OS X 10.7上),当我修改锚点时,图像中心的原点会移到左下角 下面是我用来旋转图层的代码: CALayer *myLayer = [imageView layer]; CGFloat myRotationAngle = -M_PI_2; NSNumber *rotationAtStart =

我正在尝试旋转NSImageView的CALayer。我的问题是,默认情况下,锚点看起来是(0.0,0.0),但我希望它是图像的中心(苹果的文档表明默认值应该是中心(0.5,0.5),但它不在我的系统OS X 10.7上),当我修改锚点时,图像中心的原点会移到左下角

下面是我用来旋转图层的代码:

CALayer *myLayer = [imageView layer];
CGFloat myRotationAngle = -M_PI_2;

NSNumber *rotationAtStart = [myLayer valueForKeyPath:@"transform.rotation"];
CATransform3D myRotationTransform = CATransform3DRotate(myLayer.transform, myRotationAngle, 0.0, 0.0, 1.0);
myLayer.transform = myRotationTransform;        
CABasicAnimation *myAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
myAnimation.duration = 1.0;
myAnimation.fromValue = rotationAtStart;
myAnimation.toValue = [NSNumber numberWithFloat:([rotationAtStart floatValue] + myRotationAngle)];
[myLayer addAnimation:myAnimation forKey:@"transform.rotation"];

myLayer.anchorPoint = CGPointMake(0.5, 0.5);
[myLayer addAnimation:myAnimation forKey:@"transform.rotation"];  

似乎改变某物的锚定点也会改变它的位置。以下代码段修复了该问题:

  CGPoint anchorPoint = CGPointMake(0.5, 0.5);
  CGPoint newPoint = CGPointMake(disclosureTriangle.bounds.size.width * anchorPoint.x, 
                                 disclosureTriangle.bounds.size.height * anchorPoint.y);
  CGPoint oldPoint = CGPointMake(disclosureTriangle.bounds.size.width * disclosureTriangle.layer.anchorPoint.x, 
                                 disclosureTriangle.bounds.size.height * disclosureTriangle.layer.anchorPoint.y);

  newPoint = CGPointApplyAffineTransform(newPoint, 
                                         [disclosureTriangle.layer affineTransform]);
  oldPoint = CGPointApplyAffineTransform(oldPoint,
                                         [disclosureTriangle.layer affineTransform]);

  CGPoint position = disclosureTriangle.layer.position;

  position.x -= oldPoint.x;
  position.x += newPoint.x;

  position.y -= oldPoint.y;
  position.y += newPoint.y;

  disclosureTriangle.layer.position = position;
  disclosureTriangle.layer.anchorPoint = anchorPoint;

如果我将锚点代码移动到awakeFromNib,那么原点似乎不会改变。。。我认为在我对CoreAnimation的理解方面,我遗漏了一些东西。您的代码列表不完整(特别是因为您提到将内容移动到-awakeFromNib)。请发布所有相关代码,包括调用这些代码的确切位置。还解释如何创建承载此层树的视图(从nib,从-initWithFrame:,如何创建?)。