gpt4 book ai didi

objective-c - cocoa Hello World 屏保

转载 作者:行者123 更新时间:2023-12-03 16:51:54 26 4
gpt4 key购买 nike

我一直在研究 NSView,因此我想尝试一下屏幕保护程序。我已经能够在 NSView 中显示和图像,但我无法修改此示例代码以在 ScreenSaverView 中显示简单的图片。

http://www.mactech.com/articles/mactech/Vol.20/20.06/ScreenSaversInCocoa/

顺便说一句,适用于 Snow Leopard 的很棒的教程。

我想简单地显示一个图像,我需要看起来像这样的东西......

我做错了什么?

//
// try_screensaverView.m
// try screensaver
//

#import "try_screensaverView.h"

@implementation try_screensaverView

- (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
self = [super initWithFrame:frame isPreview:isPreview];
if (self) {
[self setAnimationTimeInterval:1]; //refresh once per sec
}
return self;
}

- (void)startAnimation
{
[super startAnimation];

NSString *path = [[NSBundle mainBundle] pathForResource:@"leaf" ofType:@"JPG" inDirectory:@""];
image = [[NSImage alloc] initWithContentsOfFile:path];
}

- (void)stopAnimation
{
[super stopAnimation];
}

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

- (void)animateOneFrame
{
//////////////////////////////////////////////////////////
//load image and display This does not scale the image

NSRect bounds = [self bounds];
NSSize newSize;
newSize.width = bounds.size.width;
newSize.height = bounds.size.height;
[image setSize:newSize];
NSRect imageRect;
imageRect.origin = NSZeroPoint;
imageRect.size = [image size];
NSRect drawingRect = imageRect;
[image drawInRect:drawingRect fromRect:imageRect operation:NSCompositeSourceOver fraction:1];
}

- (BOOL)hasConfigureSheet
{
return NO;
}

- (NSWindow*)configureSheet
{
return nil;
}

@end

最佳答案

NSRect bounds = [self bounds];
NSSize newSize;
newSize.width = bounds.size.width;
newSize.height = bounds.size.height;
[image setSize:newSize];

我不知道你为什么要这样做。

NSRect imageRect;
imageRect.origin = NSZeroPoint;
imageRect.size = [image size];

又名[自身边界].size.

NSRect drawingRect = imageRect;
[image drawInRect:drawingRect fromRect:imageRect operation:NSCompositeSourceOver fraction:1];

即,[imagedrawInRect:[selfbounds]fromRect:[selfbounds]操作:NSCompositeSourceOverfraction:1]

如果您尝试以其自然大小绘制图像,则没有理由向其发送 setSize: 消息。剪掉整个第一部分,其余部分应该可以正常工作。

如果您尝试填充屏幕(这将是缩放,这与注释相矛盾),请将 drawingRect 设置为 [selfbounds],而不是 imageRect。这正如它所读的那样:

image,
draw into (the bounds of the view),
from (the image's entire area).

[image
drawInRect:[self bounds]
fromRect:imageRect

];

自然大小固定位置绘制和全屏绘制都不是有效的屏幕保护程序。后者是不可挽回的;您可以通过在屏幕上制作图像动画来使前者变得有用。

关于objective-c - cocoa Hello World 屏保,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2460169/

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