macOS 开发 - 使用 ScreenSaverView 制作屏幕保护程序

版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/83182288


制作一个图片旋转的屏幕保护程序

参考demo 来源/下载地址:
https://github.com/xiezi222/ScreenSaverDemo


1、创建一个 screensaver project

在这里插入图片描述


在这里插入图片描述

这里的 organization name 将作为相关文件的前缀


产生的工程结构如下:
其中会自动产生一个类继承自 ScreenSaverView, .m 文件中有 ScreenSaverView 中重要的方法,提供重写

在这里插入图片描述


2、添加 imgView

重写 initWithFrame 方法:

- (instancetype)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
    self = [super initWithFrame:frame isPreview:isPreview];
    if (self) {
        
        self.wantsLayer = YES;
        self.layer.backgroundColor = [NSColor cyanColor].CGColor; //无效
        [self setAnimationTimeInterval:1/30.0];
        
        [self setupView0];
        
    }
    return self;
}


- (void)setupView0{
    
    
    NSBundle *bundle = [NSBundle bundleWithIdentifier:@"com.netease.MSSceenSaver"];
    //    NSBundle *bundle = [NSBundle mainBundle]; //使用这个无效
    NSString *imgPath = [bundle pathForResource:@"beauty" ofType:@"png"];
    NSImage *img = [[NSImage alloc] initWithContentsOfFile:imgPath];
    
    CGFloat imgW = 500;
    CGFloat imgH = 500;
    
    CGRect rect = self.bounds;
    
    CGRect fRect = CGRectMake((rect.size.width-imgW)/2, (rect.size.height-imgH)/2, imgW, imgH);
    
    
    self.imgView = [[NSImageView alloc] initWithFrame:fRect];
    [self.imgView setWantsLayer:YES];
    self.imgView.layer.backgroundColor = [NSColor yellowColor].CGColor;
    
    self.imgView.image = img;
    [self addSubview:self.imgView];
}

3、添加imgView 的动画效果

重写 animateOneFrame 方法:

你也可以在这个方法中使用贝塞尔曲线等,绘制更多的动画效果。动画的频率由 AnimationTimeInterval 决定。

- (void)animateOneFrame
{
    CALayer *layer = self.imgView.layer;
    
    CATransform3D transfrom = CATransform3DIdentity;
    _angle = _angle - M_PI/200.0;
    if (_angle == -M_PI *2) {
        _angle = 0;
        NSLog(@"_angle reset");
    }
    CGPoint point = CGPointMake(0.5, 0.5);
    transfrom = CATransform3DRotate(transfrom, _angle , 0.0f, 0.0f, 1.0f);
    transfrom = CATransform3DConcat(transfrom, CATransform3DTranslate(CATransform3DIdentity, self.imgView.bounds.size.width/2, self.imgView.bounds.size.height/2, 0));
    layer.anchorPoint = point;
    layer.transform = transfrom;
    return;
}

4、添加到 系统偏好设置 - 桌面与屏幕保护程序

运行程序,将在 product 文件夹中产生一个 .saver 类型文件。
进入文件夹,双击这个 .saver 文件,系统将提示你安装。
选择为此用户安装,将安装到 ~/library/screen savers/ 目录;
为这台电脑上所有用户安装,将安装到 /library/screen savers/ 目录;且安装和删除都需要密码;

在这里插入图片描述


在这里插入图片描述在这里插入图片描述


5、删除 屏幕保护

在偏好设置面板删除后,上述文件夹的文件也会随之删除。
在文件夹删除后,偏好设置中不会马上删除,会显示为默认的屏保;仅退出桌面与保护程序目录也没用;需要重启偏好设置应用。
所以建议调试有问题时,删除文件后,重启偏好设置。


.saver 文件

一些系统的屏幕保护程序 会存放在 /system/library/screen savers/ 这个地址;
使用finder 前往去看看,右键选中一个 saver 文件,显示包内容,可以发现和平时使用的 App 差不多

在这里插入图片描述


他的 info.plist 信息如下:

在这里插入图片描述


参考资料


猜你喜欢

转载自blog.csdn.net/lovechris00/article/details/83182288