IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝……本文将从云豹直播平台开发中遇到的兼容性问题讲起。

一、直播平台开发中遇到的IOS 14系统兼容问题:

1、 在iOS14上可能出现点击cell上的视图无法响应的情况

直播平台开发中会出现该问题的原因:

iOS14更改Cell视图布局.将contentView放在最上层,如果将视图加载在cell上,将会出现contentView遮罩,导致事件无法响应.是在此前关于 contentView 的声明注释中,官方已经明确建议开发者将 customView 放在 contentView 上,使 contentView 作为 UITableViewCell 默认的父视图.

解决方法:

将cell子视图加载在contentView上.

2、使用layer.mask做遮罩时无法显示

用途:在项目聊天消息列表中,用于拉伸图片,展示气泡效果(如下图所示)

ios 放大模式 适配 ios14放大模式不兼容_ios

//    maskView = [UIImageView new];
//    maskView.image = maskImage;
//    [maskView setFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
//    self.layer.mask = maskView.layer;

在iOS14以下使用UIImageView的layer做遮罩的代码没有问题,但是在iOS14上无法正常展示
问题解决方法:

UIImage *newImage = [self stretchImage:maskImage newSize:self.bounds.size leftCapWidth:maskImage.size.width/2 topCapHeight:maskImage.size.height-7];
    CALayer *maskLayer = [CALayer layer];
    maskLayer.frame = self.bounds;
    maskLayer.contents = (id)newImage.CGImage;
    self.layer.mask = maskLayer;

- (UIImage *)stretchImage:(UIImage *)originImage newSize:(CGSize)newSize leftCapWidth:(CGFloat)leftCapWidth topCapHeight:(CGFloat)topCapHeight{
    UIImage *newImage;
    newImage = [originImage stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0);
    [newImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

3、YYAnimatedImageView图片加载不出来
直播平台开发中出现该问题的原因:
调试时发现YYAnimatedImageView.layer.contents为空导致.
解决方法:在YYAnimatedImageView底层重写的- (void)displayLayer:(CALayer *)layer方法中加上系统版本判断

- (void)displayLayer:(CALayer *)layer {
    if (_curFrame) {
        layer.contents = (__bridge id)_curFrame.CGImage;
    }else {
        if (@available(iOS 14.0, *)) {
            [super displayLayer:layer];
        }
    }
}

4、UIDatePicker样式错误问题
UIDatePicker增加了preferredDatePickerStyle,需要设置为UIDatePickerStyleWheels才会和原来样式一样。并且现在对frame的宽高设置已经不生效了。会采用系统默认的宽高。这个样式只有13.4之后才会出现,之前的系统是没有这个属性的。

if (@available(iOS 13.4, *)) {
        datapicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }

5、每次打开APP,都会提示粘贴信息.
直播平台开发中出现该问题的原因:
在UIPasteboard获取粘贴板的类,有的第三方SDK用到了UIPasteboard读取iOS系统的粘贴板内容,所以iOS14此次更新是让用户知晓,此APP读取了你的粘贴板内容,并在读取的时候展示了出来。在iOS14以下APP也是可以读取粘贴板内容的,只是用户看不到。
解决方法:在APP启动和进入后台时设置以下代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIPasteboard generalPasteboard] setString:@""];

 return YES;

}

-(void)applicationWillResignActive:(UIApplication *)application{
    [[UIPasteboard generalPasteboard] setString:@""];
}

二、如何在直播平台开发中实现静默推送

1、 使用场景:app在后台时,收到推送后自动播放一段音乐。

2、 解决方法:后台在推送时增加参数’content-available’=>‘ture’,

ios 放大模式 适配 ios14放大模式不兼容_vue_02

app端在AppDelegate.m中的

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:
(void (^)(UIBackgroundFetchResult))completionHandler

方法中加入在后台的判断即可

if (application.applicationState == UIApplicationStateBackground){
        if ([minstr([userInfo valueForKey:@"type"]) isEqual:@"9"]){
           
            [[NSNotificationCenter defaultCenter] postNotificationName:@"shop_notification" object:userInfo];
           
        }
    }

以上就是本文《直播平台开发中解决iOS 14 兼容问题和静默推送》的全部内容,随着时代发展,手机硬件也会不断升级换代,这要求我们这些开发者必须紧跟发展的潮流,不断升级更新程序。