gpt4 book ai didi

objective-c - NSView 中的 NSImage 旋转不起作用

转载 作者:行者123 更新时间:2023-12-03 17:05:09 27 4
gpt4 key购买 nike

我正在尝试在 NSView 内旋转 NSImage。首先,我将向您展示到目前为止我所做的事情。

<小时/>

图片:

<小时/>

enter image description here

<小时/>

头文件

<小时/>
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>

@interface AppController : NSObject {
CALayer *syncFirst;
}

@property (weak) IBOutlet NSView *nsview;

- (IBAction)buttonClicked:(id)sender;
- (CGImageRef) convertToCGImageFromNasImage:(NSImage *) image;

@end
<小时/>

实现文件,仅相关方法

<小时/>
- (void)awakeFromNib {

NSImage *image = [NSImage imageNamed:@"SyncRing.png"];
//init layer
syncFirst = [CALayer layer];

//animatated content size init
syncFirst.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
syncFirst.position = CGPointMake(10, 10);
syncFirst.contents = (id)[self convertToCGImageFromNasImage:image];

[nsview.layer addSublayer:syncFirst];
}

/*To convert NSImage in CGImage*/

- (CGImageRef) convertToCGImageFromNasImage:(NSImage *) image {
NSData* cocoaData = [NSBitmapImageRep TIFFRepresentationOfImageRepsInArray: [image representations]];
CFDataRef carbonData = (__bridge CFDataRef)cocoaData;
CGImageSourceRef imageSourceRef = CGImageSourceCreateWithData(carbonData, NULL);
CGImageRef myCGImage = CGImageSourceCreateImageAtIndex(imageSourceRef, 0, NULL);
return myCGImage;
}

/*When button click animate the image*/

- (IBAction) buttonClicked:(id)sender {
CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat:(2 * M_PI) * 1];
rotationAnimation.duration = 1.0f;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[syncFirst addAnimation:rotationAnimation forKey:@"rotateAnimation"];
}
<小时/>

问题:

<小时/>

基本上,我试图在单击按钮后旋转该图像。我正在尝试的代码并不是 100% 实现,而是从几个不同的地方(包括 Apple 文档)学习的。现在,很明显我犯了一些幼稚的错误,但从逻辑上讲,我的代码对我来说似乎是正确的。如果有人能指出我的错误并让我理解为什么它不起作用,那就太好了。

最佳答案

对于任何 future 的访问者,该代码可以完美运行,如果您愿意,您可以使用它,除非在 nsview 中添加图层之前确保我们必须设置 nsview 想要图层。

所以,变化将是......

<小时/>
- (void)awakeFromNib {

NSImage *image = [NSImage imageNamed:@"SyncRing.png"];
//init layer
syncFirst = [CALayer layer];

//animatated content size init
syncFirst.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
syncFirst.position = CGPointMake(10, 10);
syncFirst.contents = (id)[self convertToCGImageFromNasImage:image];

/*HERE SETWANTSLAYER TO TRUE IN ORDER TO FIX*/
[nsview setWantsLayer:YES];

[nsview.layer addSublayer:syncFirst];
}
<小时/>

使用此代码之前

请参阅评论中的讨论。有一些有用的提示,但我在解决问题时忽略了它们。功劳归于 - Peter Hosey

关于objective-c - NSView 中的 NSImage 旋转不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836131/

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