IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝……本文将从云豹直播平台开发中遇到的兼容性问题讲起。
一、直播平台开发中遇到的IOS 14系统兼容问题:
1、 在iOS14上可能出现点击cell上的视图无法响应的情况
直播平台开发中会出现该问题的原因:
iOS14更改Cell视图布局.将contentView放在最上层,如果将视图加载在cell上,将会出现contentView遮罩,导致事件无法响应.是在此前关于 contentView 的声明注释中,官方已经明确建议开发者将 customView 放在 contentView 上,使 contentView 作为 UITableViewCell 默认的父视图.
解决方法:
将cell子视图加载在contentView上.
2、使用layer.mask做遮罩时无法显示
用途:在项目聊天消息列表中,用于拉伸图片,展示气泡效果(如下图所示)
// 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’,
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 兼容问题和静默推送》的全部内容,随着时代发展,手机硬件也会不断升级换代,这要求我们这些开发者必须紧跟发展的潮流,不断升级更新程序。