Object C
郏国上
Object C, JavaScript, python高级研发工程师
展开
-
Objective-C 的应用程序在启动过程
在开发过程中,开发者应该遵循苹果的人机界面指南,确保应用程序的启动过程既符合用户的预期,也遵循良好的用户体验设计原则。在这个方法中,开发者通常会进行一些关键的初始化操作,如设置用户界面、配置应用程序的默认状态等。UIApplicationMain 会创建一个 UIApplication 实例,并设置一个 UIWindow 作为应用程序的主窗口。main 函数通常会调用 UIApplicationMain,这是 UIApplication 类的一个函数,用于设置应用程序的运行环境。原创 2024-05-14 09:19:14 · 512 阅读 · 0 评论 -
Object c事件链传递
Object c事件链传递原创 2024-05-13 15:35:59 · 435 阅读 · 0 评论 -
苹果的屏幕适配算法与安卓屏幕适配后控件差异
苹果的屏幕适配计算算法是:屏幕宽度/375*设计图的字体大小或空间宽度或高度。原创 2023-12-16 17:32:04 · 439 阅读 · 0 评论 -
socket的心跳间隔和可用连接数的矛盾和平衡
要兼顾套接字(文件描述符号,连接数)的及时释放(处理周期越短释放越及时);还要兼顾app流量和省电(心跳越短越费电和费流量);要考虑数据处理和失败冗余处理,最好一个维护连接周期发送两次心跳。后台的轮询周期最好能动态配置,在用户量很大时和客户端配置缩减轮询周期,当前期用户量很小时增大轮询周期,来达到降低服务器压力,降低app的能耗和节省流量。Socket默认连接60秒,59秒之内没有进行心跳交互,即读写数据,就会自动关闭连接。所以要保证60秒有一次心跳或收发消息。最好29秒发送一次心跳消息,59秒收不到没原创 2023-07-27 09:42:57 · 458 阅读 · 0 评论 -
‘authorizationStatus‘ is deprecated: first deprecated in iOS 14.0
locationServicesEnabled在iOS14过期问题:'authorizationStatus' is deprecated: first deprecated in iOS 14.0。解决方案:用[[CLLocationManager alloc] init].authorizationStatus代替[CLLocationManager locationServicesEnabled]原创 2023-07-15 16:03:04 · 1509 阅读 · 0 评论 -
OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries
一种解决方法:在Podfile文件中使用use_frameworks!,把原来的含有静态库的私有库或公有库拖入工程。该种方式可能需要修改头文件的引入方式。这种方式处理简单。另一种解决方法:在Podfile文件中使用use_modular_headers!。在targets->build settings->enable bitcode配置成NO;targets(project)->build settings->built active architecture only->debug 选择NO.原创 2022-12-06 11:48:38 · 2338 阅读 · 0 评论 -
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题?若你的页面不支持其它app唤醒你的app并传递参数的功能,直接在app启动函数清除粘贴板内容就可以:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UIPasteboard generalPasteboard].string = @"";原创 2022-12-06 09:55:24 · 3946 阅读 · 0 评论 -
如何获得keyWindow
由于iOS13及以后引入了SceneDelegate,导致不能通过原来的[UIApplication sharedApplication].keyWindow直接获取到正确的keyWindow。需要区分系统来获取。原创 2022-12-01 14:13:57 · 1028 阅读 · 0 评论 -
SVProgressHUD和MBProgressHUD的优缺点与SVProgressHUD震动实现
SVProgressHUD和MBProgressHUD的优缺点与SVProgressHUD震动实现。完美的弹出窗应该具有他们两个者的优点,而没有他们的缺点。如跨页面弹出,实时方便显示取消,点击toast弹出框后面的上下控件能操作,能很容易修改显示的模态弹出框动画。原创 2022-11-30 14:54:48 · 1545 阅读 · 0 评论 -
解决设置了标签的最大行数,更新标签的内容为富文本内容,导致超过最大行数不显示...问题
客户要求标签内容要有行距,那么只能通过富文本来设置行距了。这样就遇到了设置了标签的最大行数,更新标签的内容为富文本内容,导致超过最大行数不显示...问题。解决这个问题很简单,只需要加上一句`self.contentLb.lineBreakMode = NSLineBreakByTruncatingTail;`原创 2022-11-30 11:59:24 · 193 阅读 · 0 评论 -
A包含B,用block实现A和B互相调用更新数据
A包含B,用block实现A和B互相调用更新数据:在创建B时给它传递一个bock,对A特别关注的数据B更新该数据时同步给A。A创建B注册一个B的block,B需要时,调用block通知A更新最新的B关注数据给B或单例。然后再使用数据。原创 2022-11-30 11:42:33 · 375 阅读 · 0 评论 -
如何解决由引起的IQKeyboardManager部分页面返回的键盘高度比实际小或最后收到键盘隐藏通知却显示了键盘问题
如何解决由于IQKeyboardManager引起部分页面键盘高度不正确或最后收到键盘隐藏通知却显示了键盘问题:经过观察View UI Herarchy发现有键盘的页面都有UIInputSetContainerView,键盘的总高度就是UIInputSetHostView的总高度。只是iOS13及跟高的系统,键盘是在第二个窗口的UIInputWindowController中,而比iOS13低的版本在第是哪个窗口的UITextEffectsWindow中。原创 2022-11-29 14:38:06 · 995 阅读 · 0 评论 -
UIView的animateWithDuration动画不执行问题
基本动画不执行:` [UIView animateWithDuration:animationDuration animations:^{ } completion:^(BOOL finished) { }];` 其实想解决很简单,就是调用布局重新绘制函数:[self layoutIfNeeded];原创 2022-11-29 11:50:32 · 1255 阅读 · 0 评论 -
如何关闭智能键盘IQKeyboardManager
如何关闭智能键盘IQKeyboardManager: [[IQKeyboardManager sharedManager] setEnable:NO]; [IQKeyboardManager sharedManager].enableAutoToolbar = NO;原创 2022-11-29 11:38:02 · 1611 阅读 · 0 评论 -
MVVM的前世今生与在苹果开发中的应用
ViewModel:请求参数校验,和后台进行交互,后台报错显示,对后台数据进行model转换,对后台返回的数据进行再加工以便于直接控制View的数据显示,根据后台结果进行逻辑处理(当然这个逻辑也可以放在c中写逻辑或实现状态机)。M:数据模型定义, 数据再加工函数。View:通过setModel来实现数据显示,少数根据数据来区分显示UI。UIViewController负责加载View,调用ViewModel对象向服务器发送请求,根据服务器的响应结果通过更新View的model来更新UI原创 2022-11-04 11:14:23 · 1304 阅读 · 0 评论 -
通过计算的文本宽度,由于小数四舍五入引起的文字显示不全问题
通过计算的文本宽度,由于小数四舍五入引起的文字显示不全问题:通过计算的文本宽度,若出现小数,而手机的屏幕有最低分辨率(BG_1PX (1.0f / [UIScreen mainScreen].scale)),标签的宽度只能大于文本实际的宽度才能正常显示,否则会出现显示不出来的问题。解决办法是:发现计算的文本宽度带小数(小数点后全是零不算)就直接把计算出的宽度加1像素。原创 2022-10-26 17:20:43 · 180 阅读 · 0 评论 -
表格高度根据内容自适应的瀑布流
方法一:直接计算表格的高度和修改表格的frame。这种方法的优点是实现简单,对普通表格的简单处理就能实现瀑布流。缺点:当左右两侧的表格高度总和差别很大,会出现一边表格没有,另一边的表格还有很多,造成左右不基本对称。除非你能保证左右两边的高度基本相当,才能解决这个硬伤。方法二:自定义一个基于UICollectionViewFlowLayout的子类实现部分方法,并且计算出每个表格的高度。原创 2022-10-26 14:37:33 · 665 阅读 · 0 评论 -
UICollectionViewCell和UITableViewCell上下左右留空白
UICollectionViewCell和UITableViewCell上下左右留空白:-(void)setFrame:(CGRect)frame{ frame.origin.x = COMMON_EDGE_DISTANCE; frame.size.width = FULL_WIDTH - COMMON_EDGE_DISTANCE*2; frame.origin.y+=10; frame.size.height-=20; [super setFrame:frame]原创 2022-07-19 11:25:33 · 389 阅读 · 0 评论 -
使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应
第一种情况:控件根据内容进行宽度自适应:第二种情况:非表格控件根据内容进行高度自适应。第三种情况:表格控件根据内容进行高度自适应,不但要对控件进行自适应高度,还要对表格高度进行高度计算,对表格高度进行重新复制,并且采用表格复用的删除表格内容的方式复用。在UILabel自适应高度的同时,也可以对UILabel显示的最大行数进行限制...原创 2017-04-11 20:18:12 · 17423 阅读 · 0 评论 -
UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应
Masonry的自适应宽度和高度大致可以分为三类情况。第一种情况:控件根据内容进行宽度自适应(就是省略左或右方向的一个约束);第二种情况:非表格控件根据内容进行高度自适应(就是省略上或下方向的一个约束);第三种情况:表格控件根据内容进行高度自适应,不但要对控件进行最大预计宽度设置(preferredMaxLayoutWidth),还要对表格高度进行自适应(不能有height约束),对表格高度设置为高度自适应的值(UITableViewAutomaticDimension)。.........原创 2022-07-19 09:13:18 · 4196 阅读 · 0 评论 -
自适应高度的表格UICollectionView
自适应高度的表格UICollectionView1.设置预估高度:flowLayout.estimatedItemSize = CGSizeMake((SCREEN_WIDTH-0*2), (50));//UICollectionViewFlowLayoutAutomaticSize;// 自适应 不设置预估高度表格显示不出来);2.不设置表格高度;3.表格设置为自适应高度。......原创 2022-07-18 17:38:16 · 1558 阅读 · 0 评论 -
短视频 TXUGCRecord工具如何全屏显示
我们遇到短视频 TXUGCRecord工具显示时部分带刘海的手机,视频捕捉区上下有黑色区域。解决方案:1.隐藏系统状态栏;2.设置视频渲染模式为VIDEO_RENDER_MODE_FULL_FILL_SCREEN。原创 2022-07-01 16:28:20 · 269 阅读 · 0 评论 -
浏海屏手机在部分页面通过[[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom得到底部安全区高度为0问题
刘海屏手机在部分页面通过[[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom得到底部安全区高度为0问题,如何解决?可以通过重新获取keyWindow来正确找到底部安全高度和顶部安全区高度。......原创 2022-06-27 15:31:55 · 1053 阅读 · 0 评论 -
use_frameworks引起的Undefined symbols for architecture arm64
OC工程可以使用也可以不使用use_frameworks!,而含有swift的工程必须使用use_frameworks!。若原来用oc创建的私有库含有extern导入的全局变量或常量会造成该错误。最笨的解决方案,直接把私有库拖入工程,然后修改头文件的包含方式。探索通过建立一个公用的私有库,它依赖其它私有库,结果问题仍旧存在。正探索其它通用导入方式的可行性。利用test导入工程,然后手动增加私有库。。原创 2022-04-08 18:52:04 · 2856 阅读 · 0 评论 -
表格中有WKWebView底部有空白问题及解决方案优缺点
表格中有WKWebView加载高度有空白问题理论上等网页加载完成,在didFinishNavigation修改表格高度,但是发现算出的高度比实际高出现底部空白。解决方案:kvo监控self.webView.scrollView的contentSize,延迟修正表格高度,只修正一次,防止循环刷页面。这样也存在不友好的问题,页面刷新两边产生闪烁,当有大图片或多个视频或图片时显示不完全。所以显示纯文本类的h5很有效,含单张不大的图片或含单个视频也可以。原创 2022-04-07 18:39:42 · 1040 阅读 · 0 评论 -
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
WKWebView加载h5中有视频链接,无法加载视频首帧,看到一片空白和一个播放按钮。那如何让它加载首帧图片呢?很简单在视频链接前加上`controls=\"controls\" autoplay=\"autoplay\"`。因为是含有非标准h5字符串,可能只返回一个字符串,由于没有设置字体WKWebView直接显示默认字体可能很小,完全达不到ui图的效果,只能增加头设置字体来搞定了。原创 2022-04-07 16:57:54 · 1668 阅读 · 0 评论 -
UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的遍历与组装h5字符串
UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的可以遍历。注意:表情包和普通文本被遍历时相似单又被分开。表情包的插入与移动光标。使用enumerateAttributesInRange遍历。原创 2022-04-07 16:26:24 · 562 阅读 · 0 评论 -
UITextView实现图片、视频和表情与插入删除和删除。
表情是特殊的串。通过UITextView插入NSTextAttachment来显示图片。很不幸NSTextAttachment只能展示图片,不能展示视频。可以通过类继承来实现把视频链接存入它的子类,展示只能按照视频的首帧图展示。视频的和图片的上产可以通过第三方组件LFImagePickerController选择视频和图片,视频可以可以拿到视频的首帧图和NSData类型的视频数据。把视频或图像上传服务器,服务器返回它的地址。最后解析attributedText组装h5格式字符串发送给服务器。原创 2022-04-07 16:03:29 · 1328 阅读 · 0 评论 -
工程支持xcframework,检查pod版本及更新pod
工程不认识xcframework.需要将pod升级到1.10.0及其以上的版本,pod新版本才支持xcframework检查pod版本。1. 替换ruby源;2.保证只有一个ruby源,淘宝的源已经不更新维护了,现在使用ruby-china的源。多余的要移除;3.验证是否替换成功;4. 更新升级 Gem 版本;5. 安装CocoaPods;6.等待其安装成功,用命令pod --version查看是否安装成功,如果成功会显示pod的版本;7.更新原来的工程,然后工程就能支持xcframework了。原创 2021-07-12 11:34:04 · 870 阅读 · 0 评论 -
scrollView中的分页功能及影响
scrollView中的pagingEnabled的功能,当pagingEnabled被设置为YES时,以页为单位滑动,即自动到下一页的开始边界 。若你自己做一个工具条,文字的长度不固定并不能达到正好一屏,当pagingEnabled被设置为YES时,当你滑动工具条并点击按钮刷新ui,有几率出现工具条自动弹回的效果,导致右侧的内容不能完全显示。如用iPhone XR手机没有出问题,但是iPhone 12就出现了不期望的弹回效果。解决办法就是把pagingEnabled被设置为NO。原创 2021-05-20 17:51:56 · 839 阅读 · 1 评论 -
iOS 14 UITableViewCell适配问题
iOS 14 UITableViewCell适配问题:采用:直接在表格上增加view和按钮会出现按钮不能点击的问题[self.contentView addSubview:self.bgView];,当在[self.contentView addSubview:self.bgView];增加就没有这样的问题。- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifi原创 2020-10-14 15:39:47 · 576 阅读 · 0 评论 -
根据用户是否输入和是否文本框内容为空来决定显示按钮颜色
根据用户是否输入和是否文本框内容为空来决定显示按钮颜色。也可以实现按钮是否可以点击。-(UIView *)inputTextFiled{ if (!_inputTextFiled) { _inputTextFiled = [self createTextField]; _inputTextFiled.keyboardType = UIKeyboardTypeDefault; _inputTextFiled.font = [UIFont system原创 2020-08-15 08:52:10 · 392 阅读 · 0 评论