为什么这个动画没有按预期工作?

如何解决为什么这个动画没有按预期工作?

嗨,过去几天我一直在尝试修改 iOS 调整 Daisy。我已经成功添加了更多字体,让 Hello 动画停留在屏幕上,并合并了原始开发人员不想要的已关闭拉取请求。无论如何,我正在尝试修复原始版本存在的这个错误,即“playHelloStartAnimation”有时会在唤醒手机时出现错误。有时它会从开头或中间的几帧完全重播动画,有时它会完成并在几毫秒内不显示任何内容,然后继续下一个动画或按预期播放。尝试先添加一个空白动画来播放,这样当它出现错误时,您将看不到但没有帮助,更改时间,尝试其他钩子仍然会发生。不知道为什么任何帮助都会受到赞赏。

%group DiaryHello

%hook CSCoverSheetView

%property(nonatomic,retain)UIView* diaryHelloIconView;
%property(nonatomic,retain)UILabel* diaryHelloLabel;

- (void)didMoveToWindow { // add iphone hello

    %orig;


    // hello label

    if (enableHelloSwitch && showHelloGreetingSwitch && ![self diaryHelloLabel]) {
        self.diaryHelloLabel = [UILabel new];
        [[self diaryHelloLabel] setTextColor:[UIColor whiteColor]];
        if ([fontFamilyValue intValue] == 0) [[self diaryHelloLabel] setFont:[UIFont fontWithName:@"Selawik-Regular" size:24]];
        else if ([fontFamilyValue intValue] == 1) [[self diaryHelloLabel] setFont:[UIFont systemFontOfSize:24 weight:UIFontWeightRegular]];
        [[self diaryHelloLabel] setText:greetingValue];
        [[self diaryHelloLabel] setTextAlignment:NSTextAlignmentCenter];
        [[self diaryHelloLabel] setAlpha:0];
        [[self diaryHelloLabel] setHidden:YES];
        [self addSubview:[self diaryHelloLabel]];

        [[self diaryHelloLabel] setTranslatesAutoresizingMaskIntoConstraints:NO];
        [NSLayoutConstraint activateConstraints:@[
            [self.diaryHelloLabel.topAnchor constraintEqualToAnchor:self.topAnchor constant:150],[self.diaryHelloLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],[self.diaryHelloLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor],]];
    }

}

%new
- (void)initHelloViewWithAnimation:(int)animation { // set hello view up

    if (!enableHelloSwitch) return;
    if (enableMediaPlayerSwitch && ![[self diaryPlayerView] isHidden]) return;
    [[self diaryHelloIconView] stopAnimating];
    [[self diaryHelloIconView] removeFromSuperview];
    self.diaryHelloIconView = nil;

    if (animation == 0) {
        helloStartArray = [NSMutableArray new];
        for (int i = 0; i < 24; i++) [helloStartArray addObject:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"/Library/PreferenceBundles/DiaryPreferences.bundle/hello/start/%i.png",i]]];
        helloStartImage = [UIImage animatedImageWithImages:helloStartArray duration:0.6];
        self.diaryHelloIconView = [[UIImageView alloc] initWithImage:helloStartImage];

        helloSearchingArray = nil;
        helloSearchingImage = nil;
        helloAuthenticatedArray = nil;
        helloAuthenticatedImage = nil;
    } else if (animation == 1) {
        helloSearchingArray = [NSMutableArray new];
        for (int i = 0; i < 116; i++) [helloSearchingArray addObject:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"/Library/PreferenceBundles/DiaryPreferences.bundle/hello/searching/%i.png",i]]];
        helloSearchingImage = [UIImage animatedImageWithImages:helloSearchingArray duration:4.28];
        self.diaryHelloIconView = [[UIImageView alloc] initWithImage:helloSearchingImage];

        helloStartArray = nil;
        helloStartImage = nil;
        helloAuthenticatedArray = nil;
        helloAuthenticatedImage = nil;
    } else if (animation == 2) {
        helloAuthenticatedArray = [NSMutableArray new];
        for (int i = 0; i < 51; i++) [helloAuthenticatedArray addObject:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"/Library/PreferenceBundles/DiaryPreferences.bundle/hello/authenticated/%i.png",i]]];
        helloAuthenticatedImage = [UIImage animatedImageWithImages:helloAuthenticatedArray duration:1.12];
        self.diaryHelloIconView = [[UIImageView alloc] initWithImage:helloAuthenticatedImage];

        helloStartArray = nil;
        helloStartImage = nil;
        helloSearchingArray = nil;
        helloSearchingImage = nil;
    }

    [[self diaryHelloIconView] setContentMode:UIViewContentModeScaleAspectFit];
    [[self diaryHelloIconView] setClipsToBounds:YES];
    [[self diaryHelloIconView] setHidden:NO];
    if (![[self diaryHelloIconView] isDescendantOfView:self]) [self addSubview:[self diaryHelloIconView]];

    [[self diaryHelloIconView] setTranslatesAutoresizingMaskIntoConstraints:NO];
    [NSLayoutConstraint activateConstraints:@[
        [self.diaryHelloIconView.topAnchor constraintEqualToAnchor:self.topAnchor constant:50],[self.diaryHelloIconView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor],[self.diaryHelloIconView.heightAnchor constraintEqualToConstant:80],[self.diaryHelloIconView.widthAnchor constraintEqualToConstant:80],]];

}

%new
- (void)playHelloStartAnimation { // play hello start animation

    if (!enableHelloSwitch) return;
    if (enableMediaPlayerSwitch && ![[self diaryPlayerView] isHidden]) return;
    shouldPlaySearchAnimation = YES;
    [self initHelloViewWithAnimation:0];
    [[self diaryHelloIconView] setAnimationRepeatCount:1];
    [[self diaryHelloIconView] startAnimating];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW,0.3 * NSEC_PER_SEC),dispatch_get_main_queue(),^{
        [self playHelloSearchingAnimation];
    });

}

%new
- (void)playHelloSearchingAnimation { // play hello searching animation

    if (!enableHelloSwitch) return;
    if (enableMediaPlayerSwitch && ![[self diaryPlayerView] isHidden]) return;
    if (!shouldPlaySearchAnimation) return;
    [self initHelloViewWithAnimation:1];
    [[self diaryHelloIconView] setAnimationRepeatCount:0];
    [[self diaryHelloIconView] startAnimating];

    if (showHelloGreetingSwitch) [[self diaryHelloLabel] setAlpha:0];

}

%new
- (void)playHelloAuthenticatedAnimation { // play hello authenticated animation

    if (!enableHelloSwitch) return;
    if (enableMediaPlayerSwitch && ![[self diaryPlayerView] isHidden]) return;
    shouldPlaySearchAnimation = NO;
    [self initHelloViewWithAnimation:2];
    [[self diaryHelloIconView] setAnimationRepeatCount:1];
    [[self diaryHelloIconView] startAnimating];

    if (showHelloGreetingSwitch) {
        NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
        [UIView animateWithDuration:0.25 delay:0.4 options:UIViewAnimationOptionCurveEaseInOut animations:^{
            [[self diaryHelloLabel] setHidden:NO];
            [[self diaryHelloLabel] setAlpha:1];
            [notificationCenter postNotificationName:@"diaryUpdateNotificationList" object:nil];
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
                [[self diaryHelloLabel] setAlpha:0];
            } completion:^(BOOL finished) {
                [[self diaryHelloIconView] setHidden:YES];
                [[self diaryHelloLabel] setHidden:YES];
                [[self diaryHelloIconView] removeFromSuperview];
                [notificationCenter postNotificationName:@"diaryUpdateNotificationList" object:nil];
            }];
        }];
    } else {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW,0.8 * NSEC_PER_SEC),^{
            [[self diaryHelloIconView] setHidden:YES];
            [[self diaryHelloIconView] removeFromSuperview];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"diaryUpdateNotificationList" object:nil];
        });
    }

}

%end

%hook CSCoverSheetViewController

- (void)viewDidDisappear:(BOOL)animated { // remove hello view when lock screen disappeared

    %orig;

    // free up memory when hello is not visible
    [[coverSheetView diaryHelloIconView] stopAnimating];
    [[coverSheetView diaryHelloIconView] removeFromSuperview];
    helloStartArray = nil;
    helloStartImage = nil;
    helloSearchingArray = nil;
    helloSearchingImage = nil;
    helloAuthenticatedArray = nil;
    helloAuthenticatedImage = nil;

}

%end

%hook SBLockScreenManager

- (void)lockUIFromSource:(int)arg1 withOptions:(id)arg2 { // remove hello view when device was locked

    %orig;

    // free up memory when hello is not visible
    isLockedHello = YES;
    isScreenOnHello = NO;
    [[coverSheetView diaryHelloIconView] stopAnimating];
    [[coverSheetView diaryHelloIconView] removeFromSuperview];
    helloStartArray = nil;
    helloStartImage = nil;
    helloSearchingArray = nil;
    helloSearchingImage = nil;
    helloAuthenticatedArray = nil;
    helloAuthenticatedImage = nil;

}

%end

%hook SBBacklightController

- (void)turnOnScreenFullyWithBacklightSource:(long long)arg1 { // update diary when screen turns on

    %orig;

    if (![[%c(SBLockScreenManager) sharedInstance] isLockScreenVisible]) return; // this method gets called not only when the screen gets turned on,so i verify that it was turned on by checking if the lock screen is visible
    if (!isScreenOnHello) [coverSheetView playHelloStartAnimation];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"diaryUpdateNotificationList" object:nil];
    isScreenOnHello = YES;

}

%end

%hook SBDashBoardBiometricUnlockController

- (void)setAuthenticated:(BOOL)arg1 { // play authenticated animation when unlocked with biometrics

    %orig;

    if (arg1 && isLockedHello) {
        isLockedHello = NO;
        [coverSheetView playHelloAuthenticatedAnimation];
    }

}

%end

%end

原始调整源代码:https://github.com/schneelittchen/Diary

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res