首先,分析图像的组成: 背景色是纯黑色的; 图中有一个白色的直角三角形; 因为 OpenGL ES 实际绘制的图形是根据坐标点来进行填充的,而且三角形是由三个顶点连线组成的,所以 OpenGL ES...(Union,共用体) --> 因为 OpenGL ES 的坐标范围为:【-1,1】,三角形在坐标系下的展示为: ? 坐标系的展示 ---- 数据的准备已经做完,那么现在就可以进行图形绘制了。...只有一个代理方法,在 Controller 需要重新绘制 View 的时候都会调用这个代理方法,进行绘制。...【绘制步骤:绘制前准备 --> 擦除之前的绘制 --> 绘制最新的】 绘制前准备,[self.baseEffect prepareToDraw]; 查看 prepareToDraw 方法: ?...同步绘制前所有的更改,保证现在要绘制的图形就是最新的修改; 擦除之前的绘制 // Clear Frame Buffer (erase previous drawing) glClear(GL_COLOR_BUFFER_BIT
早先写了一篇关于yolov3训练自己数据集的博文Pytorch实现YOLOv3训练自己的数据集 其中很详细的介绍了如何的训练自定义的数据集合,同时呢笔者也将一些容易出现的bug写在了博文中,想着的是可以帮助到大家...[在这里插入图片描述] [在这里插入图片描述] 问题4 windows环境下路径问题 问题描述:有些小伙伴在按照笔者的步骤进行自定义数据集训练时,出现了如下的报错信息: [在这里插入图片描述] 问题的原因...:由于笔者是在linux环境下进行的实验,所以没有出现这种情况。...这个问题出现的原因是由于windows系统部分符号的不敏感,所以导致这种情况。...解决方法: 打开dataset.py,把162行换成163行即可 [在这里插入图片描述] 总结:由于笔者能力有限,在叙述上难免有不准确的地方,还请谅解。
获取 PList 的 Bundle 路径 | ⑤ PList -> 数组 ) ( 2 ) 懒加载 优化 ( ① 在 get 方法中加载数据 | ② 如果为 空 才 加载 ) 八....ViewController //该方法在 UIViewController 创建完成 , 并开始加载到内存中时 , 在这个时刻执行该 viewDidLoad 方法 //一般情况下 是 在该方法中...UI 界面 ( ① 背景 ) 设置 Main.storyboard 界面 : 1.设置背景颜色 : 选中 ViewController 下的 根 View 控件 , 在 属性查看其中 设置 Background...可以在之前的基础上进行增量修改 ; ---- ( 8 ) 效果展示 效果展示 : ---- 三....初始化数组 self.pics = [NSArray arrayWithContentsOfFile:path]; ---- ( 2 ) 懒加载 优化 ( ① 在 get 方法中加载数据 | ②
前言 看似常用的UIView,其实有很多不经常用到的方法和应该注意的机制,我是一个喜欢打破砂锅问到底的人,可是很多问题在网上搜索不到答案,大部分的博客都是转载相同的东西,所以我自己就新建 Dome,实际测试了一些数据...跳转 当我们点击push的时候首先会加载下一个界面然后才会调用界面的消失方法 initWithCoder:(NSCoder *)aDecoder:ViewController2 (如果用xib创建的情况下...之后 viewDidAppear 之前执行,这个方法会被调用多次,如果在此创建视图,可能会创建多个,而且这个方法中执行耗时操作依然会造成跳转卡顿的问题。...中跟试图的初始化是需要时间的,你在VC根试图初始化之前调用绘制UI的方法当然是不会有效果出现的。...**综上两个方法都是异步执行的,layoutSubviews方便数据计算,drawRect方便视图重绘。
⚠️因为之前我们的 SideMenuItemView设置了背景颜色,所以我们在 SideMenuItemView.xib设置默认透明即可。 ?...之前自定义控件是加载 Xib的,运行的时候是可以出现的。但是在 Xib是无法进行预览的,我以为这应该属于正常的情况,毕竟程序还没有进行运行。...关于 prepareForInterfaceBuilder()方法 这个方法可以只在预览 Xib的时候起作用可以做一些 Moke数据。...NSButton设置 attributedTitle之前的对齐方式失效 还有一个问题出现了,那就是 Xib设置文字居中,竟然运行在左边。 ?...DEC6484F-944D-4D00-B81E-B9A624D8A0A4 为了让 ViewController在右侧可以显示正确的界面,我们在 ViewController的右侧新增一个 NSView作为父试图
main()函数之前 在不越狱的情况下,以往很难精确的测量在main()函数之前的启动耗时,因而我们也往往容易忽略掉这部分数据。小型App确实不需要太过关注这部分。...更好一点的解决方法有点类似facebook,主视图会第一时间加载,但里面的数据和界面都会延后加载,这样用户就会阶段性的获得视觉上的变化,从而在视觉体验上感觉App启动得很快。 ?...我认为应该首先把启动过程分为四个部分: main()函数之前 main()函数之后至applicationWillFinishLaunching完成 App完成所有本地数据的加载并将相应的信息展示给用户...App完成所有联网数据的加载并将相应的信息展示给用户 1+2一起决定了我们需要用户等待多久才能出现一个主视图,同时也是技术上可以精确测量的时长,1+2+3决定了用户视觉上的等待出现有用信息所需要的时长...优化rootViewController加载 考虑到我作为一只高级程序猴,工资很高,为了给公司节约成本,在优化之前,当然需要先测试一下哪些ViewController的加载耗时比较大,然后再深入到具体业务中看哪些部分存在较大的优化空间
,即不是使用push方式加载子VC,而是通过AddChildViewController的方式添加的场景,则父级导航条会覆盖在子级导航条上面,所以需要在载入时把父级导航条做隐藏处理: 1.2 navigationItem... 在含有导航条的ViewController中,VC的navigationItem与VC.navigationController中的 navigationItem并不是同一个对象,如下图所示...animated: (BOOL)animated{ //如果进入的是当前视图控制器 if (viewController == self) { //背景设置为黑色 ... 方法一:(自定义视图的方法,一般人也会采用这样的方式) 就是在导航向上添加一个titleView,可以使用一个label,再设置label的背景颜色透明,字体什么的设置就很简单了...2.5.8 Tabbar的显示与隐藏 Tabbar的隐藏函数,其实只在Nav Push的之前调用时起作用 //隐藏Tabbar [viewController setHidesBottomBarWhenPushed
那么,在没有 MainWindow.xib 文件的情况下,故事板是怎样被加载到app中的呢? ...在我们将实际的功能加入 app 之前,让我们整理一下我们的故事板。我想将第一个tab命名为 Players,第2个 tab 命名为Gestures。...在以前,如果你要定制表视图单元格,你要么在代码中向cell对象添加自己的 subviews ,要么新建一个 nib 然后从nib 中加载你自己的 cell。...2.3.6 填充table view视图数据 打开PlayersViewController.m,修改table view 的数据源方法: - (NSInteger) numberOfSectionsInTableView...Label 的 Autosizing 设置如下,因此当 cell 尺寸改变时,Label 的尺寸也随之变化: 经过这些调整,删除按钮的出现会将星级图标挤到左边: 你也可以在删除按钮出现时让星星们消失
Main函数之前的性能检测 应用的启动时间,一般分为Main函数执行之前和之后,执行之前称之为pre-main 系统提供了环境变量,让开发者可以看到pre-main过程中的耗时 查看方式:在Xcode中...这就是早期系统中,为什么经常出现内存不足的提示 所以,直接使用物理内存的弊端: 可以跨进程访问,数据不安全 将整个程序加载到内存,导致内存浪费 2.1.2 虚拟内存系统 现代的操作系统都引入了虚拟内存,...二进制重排 4.1 缺页中断的消耗 当系统访问虚拟内存时,发现数据还未加载到物理内存中,会触发缺页中断(Page Fault),造成进程阻塞。此时系统会先将数据加载到物理内存中,进程才能继续运行。...虽然每一页数据加载到内存的速度很快,毫秒级别,但在应用冷启动时,可能会出现大量的缺页中断,对启动速度带来一定的时间消耗 使用测试项目,查看应用在启动过程中,Page Fault所带来的消耗 在Xcode...load方法在viewDidLoad方法之前,和LinkMap文件中的顺序一致 所以,按照默认配置,在应用启动时,会加载到大量与启动时无关的代码,导致Page Fault的次数增长,影响启动时间。
1、iOS上的页面展示和逻辑 1.1 iOS的MVC设计模式 在介绍iOS的页面展示之前,我们需要先知道iOS应用的运行逻辑和设计模式。...层中所进行的创建或修改数据的操作,通过Controller对象传达出去,最终会创建或更新Model。...View作为一个ViewController的属性(property)存在,其生命周期在ViewController的生命周期内。...3、多页面栈的管理方法 有了上文的铺垫,接下来可以更加细致地介绍iOS中多页面栈的管理方法。正如之前提到的,多页面即多个View。...,给他赋予一个NSString的值,会让ViewController在App被放到后台之前完成编码(保存)。
在加载卸载循环中,controller处理的大部分逻辑。...4 controller调用viewDidLoad方法来执行一些加载时(加载时一词,相对于编译时、运行时)任务。 ...如果controller释放了它的view, 它会调用 viewDidUnload.可以重载这个函数来进行额外的清理操作(不要清除view和那些加载循环中无法rebuild的数据)。...解决方法1:去掉动画 解决方法2:监听当前view的动画是否完成 问题场景: 此类问题比较容易出现在两个vc连续push或者pop的时候,简单做法就是将push或者pop...,在弄明白之前会有些confusing),因此这些效果使用起来非常方便,相信一般项目中是足够使用的了。
不做处理的话, iponeX上会出现变形,我们以宽的缩放比为正比缩放比,这样不管以后屏幕高度如何变化,都不会出现变形的情形。...].size.height #define kNavBarHeight 44.0 //注意:请直接获取系统的tabbar高度,若没有用系统tabbar,建议判断屏幕高度;之前判断 状态栏高度的方法不妥...TabBar上移 系统原生的Tabbar在push的时候会上移 在UINavigationController的基类重写pushViewController代理方法,在Push的时候修正一下TabBar...,所以它需要加载较高像素的图片,我们要提供必要的@3x资源。...另外由于iPhone X极高的长宽比,我们用作背景的图片都需要重新设计,以保证比例适合,内容被裁切后效果仍然ok。 ?
否则可能导致bar的背景设置无效。...ios14适配 1、更改了cell布局视图,之前将视图加载在cell上,将会出现contentView遮罩,导致事件无法响应,必须将customView 放在 contentView 上 2、UIDatePicker...之前设置na bar和tab bar外观的方法可能会无效 ios12适配 1、C++ 标准库libstdc++相关的3个库(libstdc++、libstdc++.6、libstdc++6.0.9 )废弃...ios11适配相关 ios10适配 1、通知统一使用UserNotifications.framework框架 2、UICollectionViewCell的的优化,新增加Pre-Fetching预加载机制...3、苹果加强了对隐私数据的保护,要对隐私数据权限做一个适配,iOS10调用相机,访问通讯录,访问相册等都要在info.plist中加入权限访问描述,不然之前你们的项目涉及到这些权限的地方就会直接crash
,也就是重写),而实际上 UITableViewCell B 中的方法B设计上不是为 通知A服务的,其中调用的一些未知的数据,所有就出现了崩溃。...,就是因为UITableViewCell B没有在页面被 POP后被释放掉,才会出现这样的 Crash,那么为什么没被释放呢 dealloc的不被调用的情况。...而且重写该方法时不能显式调用[super dealloc],和继承中先加载父类再加载子类相反,注销时先注销子类之后再注销父类。因为系统会自动帮你调用父类的dealloc方法。...比如viewController中有个block属性,在block中又强引用了self或者其他成员变量,那么这个viewController与自己的block属性就形成循环引用,导致viewController...在方法A中打印当前类名,然后多次 push进入UITableViewCell B中后再次进入 UITableViewCell A中,触发通知A,调用方法A会出现下面的情况: ?
; -- 数据交换 : 获取委托对象, 可以向其中存取数据, 可以作为 IOS 应用的通信中心, 程序组件之间通过委托对象进行数据交互; -- 处理生命周期事件 : 应用程序委托对象还处理 IOS 应用的各种生命周期事件...; -- 创建 ViewController 对象 : 该对象用于加载该对象对应的 xib 等界面设计文件; self.viewController = [[FKViewController alloc.../ 让该程序的窗口加载、并显示viewController视图控制器关联的用户界面 self.window.rootViewController = self.viewController; //...回调该方法; -- "willMoveToSuperview : " 方法 : 在将要添加到父控件之前, 回调该方法; -- "didMoveToWindow : " 方法 : 将控件添加到窗口完成时...IOS 已经下架了所有的 非 Retina 屏幕的设备, 目前在售的所有设备都是 Retina 设备, 但是之前卖出的许多设备有些不是 Retina 屏幕的; -- 支持 Retina 屏幕的设备 :
的配置,ViewController的配置不生效 也可以在Info.plist添加默认的状态栏样式 Status bar style设置为UIStatusBarStyleLightContent或UIStatusBarStyleDefault...加载时会自动调用preferredStatusBarStyle方法和prefersStatusBarHidden方法 如果要想之后事件里设置前景色或隐藏的话,可以把样式和是否隐藏设置为全局变量,修改变量后直接调用...在NavigationController中,那么直接在ViewController设置是不生效的,只能在NavigationController中设置 所以如果你用的Storyboard中配置的NavigationController...话,就必须为NavigationController添加一个自定义的类,就稍显麻烦了,所以并不推荐用这种方式设置 设置背景色 改变方法有两种 系统提供的方法 navigationBar的setBarTintColor...下的黑线,会导致状态栏颜色与navigationBar的背景色不同,暂没找到好的解决方法 6) 设置navigationBar背景透明的方式 跟去黑线的方式相同
TableView卡顿环境分析: tableView加载过多的高清大图,Runloop不只处理iOS事件,渲染图形也是runloop处理的。 ...而渲染图形的UI操作必须在主线程中,不能开辟线程进行图形处理。 在拖动tableView的时候,Runloop要处理拖动事件,还要处理过多图片渲染,而造成卡顿。...解决卡顿分析: 1、Runloop在一次循环渲染图片过多,那就让Runloop一次处理一张图片 2、将处理图片的代码放在block中,然后加入数组中,处理几次加入几次。 ... &CFRetain, &CFRelease, NULL }; //创建Runloop观察者 kCFRunLoopBeforeWaiting 观察在等待状态之前...然后把观察者扔进runloop,这样我们就能拿到,Runloop等待之前的回调。 然后把任务扔到回调中。 注意:这样还没有结束,还有一个问题待解决。
为了修改带分组tableview的section header跟随置顶的问题,网上的奇淫技巧比方通过修改scroller的回调方法,体验不好,正规的方法是修改为tableView的UITableViewStyleGrouped...,最原始的就是frame,如果是使用约束,也需要至少指定左、上,宽、高,否则约束会出现异常(xib中配置约束或者使用Masonry配置约束),比方设置一个view在屏幕的底部的约束: [view mas_makeConstraints...,搜索框的背景修改,网上都有很多奇淫技巧,发现都不正规,正规的改法往往很简单,原因在于控件有很多层次,由于没有找到背景所在的正确的层级,所以你发现很多的设置不生效,关键的点是经常使用Debug View...Hierarchy观察你想要修改的控件对象,这时候修改才会一步到位,比方搜索框的背景修改: 不生效: self.searchBar.backgroundColor = UIColorMake(...的预加载 [viewController load]; //[viewController loadViewIfNeeded];
我们可以发现,当我们新建一个项目,直接在stroyboard为view设置一个背景颜色,然后运行项目,就能看到换了背景颜色的view,这说明系统已经帮我们创建了一个UIWindow,那么这个UIWindow...,就会发现我们之前设置的view没有办法显示了。...Main Interface 中 Main删除 此时我们基本可以想到,UIWindow应该是在加载storyboard的时候系统创建的,那么系统是如何加载storyboard的呢?...系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口root viewcontroller...root viewcontroller,然后使窗口显在示屏幕上。
9.说说实现预加载的方法 关键词:#网络传输 #无限滚动 #Threshold 在实际开发中,列表经常需要随着滑动而不停的展示新的内容。在滑动到一定程度后,我们就需要发送网络请求,以获得新的数据。...网络请求是一种耗时且昂贵的操作,为了提高用户体验,开发者经常运用预加载的方式提前请求,这样可以在用户滑动到列表最底部之前提前获得最新数据,无需让用户等待。这就是无限滚动列表。...以上就是一种最简单的预加载方法。它的缺点十分明显,就是当列表很长时,会出现新加载的页面还没看,应用就会发出另一次请求的情况。...的数据,可是我们之前加载的第 30 到第 40 个 cell 的数据还没有被访问。...为了避免循环引用,最好的方法就是在我们的 UICollectionViewLayout 子类中定义一个 protocol,然后让 ViewController 实现这个protocol,来完成高度的获得
领取专属 10元无门槛券
手把手带您无忧上云