iOS暗黑模式(Dark Mode)轮播图(网络图片)适配【附代码】

今天爱分享给大家带来iOS暗黑模式(Dark Mode)轮播图(网络图片)适配【附代码】,希望能够帮助到各位。

对于图片的适配,大多数的做法是准备两张图片,一张是暗黑模式的,一张是正常模式的。但是对于网络上(公司服务器)拿到的轮播图或者网络图片,这些要用两张的话个人觉得有点麻烦了,如果是公司的图片UI需要准备两张倒是可以实现,但是如果是一些其他的图片,譬如用户自己上传的图片,那么我们是无法进行修改的。所以我的做法也很简单,在原来的imageView上面加盖一个蒙版就行,当用户切换到暗黑模式的时候把蒙版打开,这样可以调低图片的亮度值,假如是一张亮色的图片,因为有了蒙版也不会至于那么刺眼。上代码:(由于对比显示,所以我没有用图片直接设置imageView的背景为红色)

UIImageView *imageView = [[UIImageView alloc] init];
    imageView.backgroundColor = [UIColor redColor];
    imageView.frame = CGRectMake(0, 100, self.view.frame.size.width, 300);
    [self.view addSubview:imageView];
    
    UIView *backView = [[UIView alloc] init];
    backView.frame = imageView.frame;
    backView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    [self.view addSubview:backView];

原来图片
iOS暗黑模式(Dark Mode)轮播图(网络图片)适配【附代码】插图

加蒙版以后的图片
iOS暗黑模式(Dark Mode)轮播图(网络图片)适配【附代码】插图(1)

这样一对比就会发现加了蒙版的视觉效果不会那么刺眼,我的透明度设置的是0.5,你可以根据你们公司的需求进行设置即可。这样的话也算是完成了网络图片或者轮播图的暗黑模式适配了,

BUT:因为你加了蒙版,所以如果你后面的view或者是imageView有手势的话会失效
所以我们需要对点击到蒙版上的这个事件进行传递,详细的相关资料大家可以自行去搜索。我只告诉你最简单的解决方法,可能会有不严谨的地方。这时候我们只需要自定义一个view,然后在hitTest:(CGPoint)point withEvent:(UIEvent *)event里面让当前的这个蒙版view不响应手势即可。

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView *view = [super hitTest:point withEvent:event];
    if (view== self) {
        return nil;
    }
    return [super hitTest:point withEvent:event];
}

iOS暗黑模式(Dark Mode)轮播图(网络图片)适配【附代码】插图(2)

iOS暗黑模式(Dark Mode)轮播图(网络图片)适配【附代码】插图(3)

本文只是默认了当前用户是在暗黑模式下的,实际开发中大家还需要用户在当前页面切换了模式,这个时候就需要在具体的界面监听下面这个方法

-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{
   //注意:这里返回的是前一次的状态
    [super traitCollectionDidChange:previousTraitCollection];
    if (@available(iOS 13.0, *)) {
        if (previousTraitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
            self.backView.hidden = YES;
        }else if (previousTraitCollection.userInterfaceStyle == UIUserInterfaceStyleLight){
            self.backView.hidden = NO;
        }
    } else {
        self.backView.hidden = YES;
    }
}

但是需要注意的是这个方法显示的是前一次的状态。
至此,本文提到的关于暗黑模式的适配全部完成,有了这些以后,整个APP才算得上是完全适配了暗黑模式吧,而不是有一部分是深色的,有些地方却又是亮色的。

人已赞赏
IOS

iOS暗黑模式(Dark Mode)WKWebview适配【附代码】

2020-10-19 14:39:18

IOS

苹果账号被封号,如何申诉恢复开发者资格【详细讲解】

2020-10-19 14:46:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧