Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
GKWenBo opened this issue Jun 1, 2023 · 10 comments
Open

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

GKWenBo opened this issue Jun 1, 2023 · 10 comments

Comments

@GKWenBo
Copy link

GKWenBo commented Jun 1, 2023

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

@GKWenBo
Copy link
Author

GKWenBo commented Jun 1, 2023

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

@internetWei
Copy link
Owner

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

@lukapool
Copy link

lukapool commented Jun 2, 2023

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

@GKWenBo
Copy link
Author

GKWenBo commented Jun 2, 2023

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

@internetWei
Copy link
Owner

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

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

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

@GKWenBo
Copy link
Author

GKWenBo commented Jun 2, 2023

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

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

@internetWei
Copy link
Owner

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

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

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

@GKWenBo
Copy link
Author

GKWenBo commented Jun 2, 2023

/// 获取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上,是没啥问题的。辛苦帮忙看放大模式兼容处理了。

@internetWei
Copy link
Owner

internetWei commented Jun 5, 2023

/// 获取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显示区域,最终可能会导致修复启动图失败,该问题正在修复中。

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

@GKWenBo
Copy link
Author

GKWenBo commented Jun 5, 2023

好的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants