LLDynamicLaunchScreen icon indicating copy to clipboard operation
LLDynamicLaunchScreen copied to clipboard

大字模式和正常模式切换,启动还是白屏

Open GKWenBo opened this issue 2 years ago • 10 comments

你好,请教一下,第一次我在正常模式,框架修复白屏成功,然后我切换大字模式,白屏一直存在,请问可以怎么处理呀

GKWenBo avatar Jun 01 '23 08:06 GKWenBo

我查看了下app沙盒,有两张启动屏图,一张正常,一张白色

GKWenBo avatar Jun 01 '23 10:06 GKWenBo

你好,我在iPhone上没有找到你说的大字模式,请问你指的是“设置”->“显示与亮度”->“文字大小”这里调整文字大小吗?我尝试将文字大小调到了最大,但是没有复现你说的问题。请你具体描述一下你遇到的问题,最好提供一下视频或详细的复现步骤。 IMG_0428

internetWei avatar Jun 02 '23 03:06 internetWei

他应该是指“设置-显示与亮度-显示(缩放显示)-更大字体”

lukapool avatar Jun 02 '23 03:06 lukapool

@lukapool 是这里设置的,我调试时,发现启动屏获取图片方法可能会因为嵌套,获取不到图片视图

GKWenBo avatar Jun 02 '23 03:06 GKWenBo

@lukapool 是这里设置的,我调试时,发现启动屏获取图片方法可能会因为嵌套,获取不到图片视图

按照“设置-显示与亮度-显示(缩放显示)-更大字体”这个方式选择更大字体,确实会出现你说的问题。由于我之前从来没用过该功能所以未考虑到这方面,对你造成的困扰十分抱歉,我会尽快解决该问题。

另外,你提到 “启动屏获取图片方法可能会因为嵌套,获取不到图片视图” , 这句话我没明白你的意思?麻烦你看到了具体解释一下这句话的意思。

internetWei avatar Jun 02 '23 05:06 internetWei

类似于这种结构: 截屏2023-06-02 13 31 46

可能需要递归遍历子视图,我对框架原理还不是很了解,看是否需要递归遍历所有子视图。现在遍历只拿到了UIStackView,嵌套的图片视图拿不到的。

GKWenBo avatar Jun 02 '23 05:06 GKWenBo

类似于这种结构: 截屏2023-06-02 13 31 46

可能需要递归遍历子视图,我对框架原理还不是很了解,看是否需要递归遍历所有子视图。现在遍历只拿到了UIStackView,嵌套的图片视图拿不到的。

框架内部确实有遍历启动图的子视图的逻辑,但是没有遇到过你描述的 “只拿到了UIStackView,嵌套的图片视图拿不到的” 这种情况;另外,你遇到的关于开启大字模式后启动图问题,跟这个应该没有关系,我正在解决该问题。

internetWei avatar Jun 02 '23 05:06 internetWei

/// 获取UIView上关于UIImage的所有位置数据。
+ (NSArray<NSValue *> *)ll_imageInfoFromView:(UIView *)aView {
    NSMutableArray<NSValue *> *imageFrames = [NSMutableArray array];
    for (UIImageView *imageView in aView.subviews) {
        if (imageView.isHidden) { continue; }
        if (![imageView isKindOfClass:UIImageView.class]) { continue; }
        if (imageView.image == nil) { continue; }
        
        // 计算image在imageView中的具体位置。
        CGRect imageRect = [imageView.image ll_CGRectWithContentMode:imageView.contentMode viewSize:imageView.bounds.size clipsToBounds:imageView.clipsToBounds];
        
        // 计算image在view中的具体位置。
        CGFloat x = CGRectGetMinX(imageView.frame) + CGRectGetMinX(imageRect);
        CGFloat y = CGRectGetMinY(imageView.frame) + CGRectGetMinY(imageRect);
        CGFloat width = CGRectGetWidth(imageRect);
        CGFloat height = CGRectGetHeight(imageRect);
        [imageFrames addObject:[NSValue valueWithCGRect:CGRectMake(x, y, width, height)]];
    }
    return [imageFrames copy];
}

我设置的启动图,view第一个子视图嵌套的是UIStackVIew,然后再UIStackView里面添加的图片视图,上面这段代码遍历的时候只会拿到UIStackView容器视图,图片视图是拿不到的,会对后续修复逻辑有影响,直接就return不执行后续逻辑了,可以写demo验证一下;如果直接将图片加到启动屏view上,是没啥问题的。辛苦帮忙看放大模式兼容处理了。

GKWenBo avatar Jun 02 '23 06:06 GKWenBo

/// 获取UIView上关于UIImage的所有位置数据。
+ (NSArray<NSValue *> *)ll_imageInfoFromView:(UIView *)aView {
    NSMutableArray<NSValue *> *imageFrames = [NSMutableArray array];
    for (UIImageView *imageView in aView.subviews) {
        if (imageView.isHidden) { continue; }
        if (![imageView isKindOfClass:UIImageView.class]) { continue; }
        if (imageView.image == nil) { continue; }
        
        // 计算image在imageView中的具体位置。
        CGRect imageRect = [imageView.image ll_CGRectWithContentMode:imageView.contentMode viewSize:imageView.bounds.size clipsToBounds:imageView.clipsToBounds];
        
        // 计算image在view中的具体位置。
        CGFloat x = CGRectGetMinX(imageView.frame) + CGRectGetMinX(imageRect);
        CGFloat y = CGRectGetMinY(imageView.frame) + CGRectGetMinY(imageRect);
        CGFloat width = CGRectGetWidth(imageRect);
        CGFloat height = CGRectGetHeight(imageRect);
        [imageFrames addObject:[NSValue valueWithCGRect:CGRectMake(x, y, width, height)]];
    }
    return [imageFrames copy];
}

我设置的启动图,view第一个子视图嵌套的是UIStackVIew,然后再UIStackView里面添加的图片视图,上面这段代码遍历的时候只会拿到UIStackView容器视图,图片视图是拿不到的,会对后续修复逻辑有影响,直接就return不执行后续逻辑了,可以写demo验证一下;如果直接将图片加到启动屏view上,是没啥问题的。辛苦帮忙看放大模式兼容处理了。

确实有这个问题,如果UIImageView嵌套在UIScrollView、UIStackView等视图内的话,目前会无法获取到UIImage显示区域,最终可能会导致修复启动图失败,该问题正在修复中。

在大字模式下的问题比较复杂,该问题也正在解决。

internetWei avatar Jun 05 '23 06:06 internetWei

好的

GKWenBo avatar Jun 05 '23 07:06 GKWenBo