gpt4 book ai didi

objective-c - cocoa 屏幕保护程序 View

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

我正在尝试在 mac OS X 中使用 ScreenSaverView

我遵循了本教程 http://cocoadevcentral.com/articles/000088.php它起作用了(不能说完美无缺,但起作用了)。我还在本教程的第 2 部分中看到他们正在使用 openGL 等东西。

我有 2 个一般性问题:

1)我可以在屏幕保护程序 View 中使用SprteKit吗?

2)我的代码有什么问题 -> 它编译得很好,但是除了黑屏之外我什么也没看到(我想看到我的 *.png)。

- (instancetype)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
self = [super initWithFrame:frame isPreview:isPreview];
if (self)
{
_imageView = [[NSImageView alloc]initWithFrame:[self bounds]];
[_imageView setImage:[NSImage imageNamed:@"SettingsButton.png"]];
[self addSubview:_imageView];
[self setAnimationTimeInterval:1.0];
}
return self;
}

编辑:尝试使用绘制矩形:

- (void)drawRect:(NSRect)rect0
{
[super drawRect:rect0];

NSImage *anotherImage = [NSImage imageNamed:@"SettingsButton.png"];
[anotherImage drawAtPoint:NSMakePoint(10,100) fromRect:NSMakeRect(0,0,[anotherImage size].width,[anotherImage size].height) operation:NSCompositeCopy fraction:1.0];


// Calculate a random color
CGFloat red = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;
CGFloat green = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;
CGFloat blue = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;

NSColor* color = [NSColor colorWithCalibratedRed:red
green:green
blue:blue
alpha:1];


NSColor * color2 = [NSColor colorWithPatternImage:anotherImage];
[color2 set];

NSBezierPath * path = [NSBezierPath bezierPathWithRect:rect0];
[path fill];
}

当我设置一个有效的颜色时,我可以看到一个屏幕被随机颜色填充(正如意思一样)

当我使用 color2 时,它是图像中的图案没有任何效果:-( -> 我尝试了不同的图像那里什么也没有...

我在构建阶段检查过,我确实将图像复制为捆绑资源

可能是什么问题?

编辑:好的,所以在我尝试绘制矩形之后,我怀疑 imageNamed 方法引起了麻烦,并将我的原始尝试重写为:

- (instancetype)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
self = [super initWithFrame:frame isPreview:isPreview];
if (self)
{
_imageView = [[NSImageView alloc]initWithFrame:[self bounds]];
NSBundle * tempBundle = [NSBundle bundleForClass:[self class]];

// Load your image, "top.tiff". Don't forget to release it when you are done (not shown).
NSImage * theImage = [[NSImage alloc] initWithContentsOfFile:
[tempBundle pathForImageResource:@"personal1.jpg"]];
[_imageView setImage:theImage];
[self addSubview:_imageView];
[self setAnimationTimeInterval:1.0];

}
return self;
}

哇哦,它成功了!!(有点)我看到了我的照片:-)!!!

至于问题的第 1 部分 -> 是的,这是可能的刚刚尝试过,它有效!有一点缺点,我只能使用 cmd 键退出 ScreenSaver xD

通过子类化 SKView 并将事件传递给下一个响应者,成功解决了这个问题。

然而,它给了我一个伟大的想法 -> 实际上,它只是提供了一个机会来制作一个简单的 SK 游戏,作为屏幕保护程序的一部分,这可能是一个可爱的功能。

遗憾的是我无法将其提交到应用商店:)

最佳答案

我不清楚 SpriteKit View (SKView) 是否可以在普通的 OSX/iOS 应用程序中使用。我过去搜索过,但一无所获。

如果 SpriteKit 与其他游戏框架类似(它借用了大部分结构),那么它将使用传统的游戏循环;即清除屏幕,绘制所有内容,稍等一下,然后重复。

Cocoa 应用程序使用一个对事件使用react的运行循环,并采取措施仅重绘需要重绘的内容。

所以我会对你的第一个问题说“不”。

就你的第二个与代码相关的问题而言,我看不出它有什么问题,但是我不熟悉该 init 方法;它是哪个类的子类?

关于objective-c - cocoa 屏幕保护程序 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946808/

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