首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

【iOS 开发】用 Carthage 摆脱 Bridging-Header.h

鉴于现在大部分 iOS 常用库都还是用 OC 实现的,我们常常需要用到一个叫做 Bridging-Header.h 的东西来在 Swift 项目中使用 OC 实现的框架,当然前提是在这个项目里我们不能或者不想使用 Cocoapods 或 Carthage。 在 iOS 8 之后,我们可以使用 framework 了,相比于麻烦地操作一遍一下步骤: 创建一个 Bridging-Header.h 文件 在 target(还要注意不能是 project)的 Build Settings 找到 Objective-C Bridging Header 项 然后在里面填上路径,还要注意一下 绝对/相对 路径 我更愿意直接把 xxx.framework 放到项目里,然后使用的时候在顶部写上 <code>import XXX</code>。如果这个框架是 AFNetworking 的话,我们可以在它的 releases 页面下载到 AFNetworking.framework.zip。 但更多像 SVProgressHUD 这样的框架,你只能找到源码,并没有现成的 framework 文件给你用。 利用 Carthage 打包 framework 好在它支持了 Carthage。创建了一个文件夹,里面初始只有一个 cartfile cartfile 里面随便写了俩常用框架 在终端执行 <code>carthage update</code> 之后 现在我们可以直接把打包好的 framework 文件复制到项目里使用了,以后想用什么框架都可以在这个 cartfile 里面添加,在这个文件夹里取用 framework。 说白了就是一个利用 Carthage 找 framework 文件的方法。 需要注意的是,如果你想通过自行编译源码,然后在 Products 文件夹里取用 framework,可能这个文件的架构会有问题。

优秀的个人博客,低调大师

Android开发 - Fragment与Activity生命周期比较

1.Fragment的生命周期 见下图 2.与Activity生命周期的对比 见下图 3. 代码场景演示实例 切换到该Fragment: AppListFragment(7649): onAttachAppListFragment(7649): onCreateAppListFragment(7649): onCreateViewAppListFragment(7649): onActivityCreatedAppListFragment(7649): onStartAppListFragment(7649): onResume 屏幕灭掉: AppListFragment(7649): onPauseAppListFragment(7649): onSaveInstanceStateAppListFragment(7649): onStop 屏幕解锁 AppListFragment(7649): onStartAppListFragment(7649): onResume 切换到其他Fragment:AppListFragment(7649): onPauseAppListFragment(7649): onStopAppListFragment(7649): onDestroyView 切换回本身的Fragment: AppListFragment(7649): onCreateViewAppListFragment(7649): onActivityCreatedAppListFragment(7649): onStartAppListFragment(7649): onResume 回到桌面 AppListFragment(7649): onPauseAppListFragment(7649): onSaveInstanceStateAppListFragment(7649): onStop 回到应用 D/AppListFragment(7649): onStartAppListFragment(7649): onResume 退出应用 AppListFragment(7649): onPauseAppListFragment(7649): onStopAppListFragment(7649): onDestroyViewAppListFragment(7649): onDestroyAppListFragment(7649): onDetach

优秀的个人博客,低调大师

iOS开发--3D Touch的基本使用

1.桌面快捷菜单项 效果如图: 1.桌面快捷菜单项 效果如图: 1.桌面快捷菜单项 效果如图: 桌面快捷菜单 点击之后的效果如图: 点击桌面快捷菜单的效果 接下来看下具体实现:1).在-application:didFinishLaunchingWithOptions:方法中用-setShortcutItems:方法来添加快捷菜单项。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //3D Touch按压程序图标的快捷项 //快捷菜单的图标 UIApplicationShortcutIcon *icon1=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCaptureVideo]; UIApplicationShortcutIcon *icon2=[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd]; UIApplicationShortcutIcon *icon3=[UIApplicationShortcutIcon iconWithTemplateImageName:@"search"]; //快捷菜单 UIApplicationShortcutItem *item1=[[UIApplicationShortcutItem alloc]initWithType:@"1" localizedTitle:@"嘿嘿" localizedSubtitle:nil icon:icon1 userInfo:nil]; UIApplicationShortcutItem *item2=[[UIApplicationShortcutItem alloc]initWithType:@"1" localizedTitle:@"呵呵" localizedSubtitle:@"干嘛去洗澡" icon:icon2 userInfo:nil]; UIApplicationShortcutItem *item3=[[UIApplicationShortcutItem alloc]initWithType:@"1" localizedTitle:@"搜索" localizedSubtitle:nil icon:icon3 userInfo:nil]; //设置app的快捷菜单 [[UIApplication sharedApplication] setShortcutItems:@[item1,item2,item3]]; //导航 self.window.rootViewController=[[UINavigationController alloc]initWithRootViewController:[ViewController new]]; return YES;} 2).在-application:performActionForShortcutItem:completionHandler:方法中实现点击快捷菜单的方法: //3D Touch按压程序图标的快捷项时触发的方法-(void)application:(UIApplication )application performActionForShortcutItem:(UIApplicationShortcutItem )shortcutItem completionHandler:(void (^)(BOOL))completionHandler{ NSString title; if([shortcutItem.localizedTitle isEqualToString:@"嘿嘿"]) { title=@"嘿嘿"; } else if([shortcutItem.localizedTitle isEqualToString:@"呵呵"]) { title=@"呵呵"; } else if([shortcutItem.localizedTitle isEqualToString:@"搜索"]) { title=@"搜索"; } //这里就弹个框子意思一下 //由于UIAlertView在iOS 9被废弃,因此选用UIAlertController UIAlertController alertController=[UIAlertController alertControllerWithTitle:@"提示" message:[NSString stringWithFormat:@"你点击了“%@”",title] preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction action=[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleDefault handler:^(UIAlertAction action) { [alertController dismissViewControllerAnimated:YES completion:nil]; }]; [alertController addAction:action]; [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];} 2.程序内的3DTouch按压操作: 表视图 3DTouch按压的时候生成的预览 peek时上拉出现的菜单 1).首先,实现3DTouch的视图控制器要遵守:UIViewControllerPreviewingDelegate协议,它有2个required级别的协议方法:-previewingContext:viewControllerForLocation:以及-previewingContext:commitViewController: 2).检测3DTouch是否可用,并注册3DTouch: 检测3D Touch是否可用 -(BOOL)is3DTouchAvailiable{ if(self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable) return YES; return NO;} 注册3DTouch if([self is3DTouchAvailiable]) { [self registerForPreviewingWithDelegate:self sourceView:self.view]; } 3).实现协议方法: -(UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{ NSIndexPath *indexPath=[_tbVew indexPathForRowAtPoint:CGPointMake(location.x, location.y-64)]; if(indexPath) { DetailViewController *detail=[[DetailViewController alloc]init]; detail.title=_dataArray[indexPath.row]; //detail.preferredContentSize=CGSizeMake(300, 300); __weak typeof(self) wkSelf=self; //------------上拉时的菜单------------------- //置顶及其点击逻辑 UIPreviewAction *topAction=[UIPreviewAction actionWithTitle:@"置顶" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * action, UIViewController * previewViewController) { [wkSelf.dataArray exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0]; [wkSelf.tbVew reloadData]; [wkSelf showAlert:@"提示" body:@"已置顶"]; }]; //删除及其点击逻辑 UIPreviewAction *deleteAction=[UIPreviewAction actionWithTitle:@"删除" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction *action, UIViewController * previewViewController) { [wkSelf.dataArray removeObjectAtIndex:indexPath.row]; [wkSelf.tbVew reloadData]; [wkSelf showAlert:@"警告" body:@"已删除"]; }]; //传递上拉菜单项给detail detail.actions=@[topAction,deleteAction]; return detail; } return nil;}-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{ [self showViewController:viewControllerToCommit sender:self];} 4).要previewing的视图控制器必须实现:-(NSArray<id<UIPreviewActionItem>> *)previewActionItems方法,该方法定义了peek时上拉出来的菜单: /**peek时上拉出来的菜单*/-(NSArray<id<UIPreviewActionItem>> *)previewActionItems{ return self.actions;}

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册