入门教程1-Tutorial01-GLKit OpenGLES入门教程2-Tutorial02-shader入门 OpenGLES入门教程3-Tutorial03-三维变换 OpenGLES入门教程4- The final rendering destination of the OpenGL pipeline is calledframebuffer) 每一个iOS原生控件都有一个对应的CoreAnimation 把纹理对象关联到帧缓存 1、新建纹理 2、设置纹理格式 3、分配纹理内存 4、新建帧缓存 5、切换帧缓存为纹理对象 GLuint colorTexture; // 1 glGenTextures 上面的弯路还有包括多个顶点数组、GLKBaseEffect和shader混用等,本来是打算用shader来实现,但是iOS卷 推荐熟练使用GLKBaseEffect,最后还是用的GLKBaseEffect 学习OpenGL ES对了解iOS的性能优化很有帮助。 现在再看上面那个图,会有不一样的认知。 参考帧缓存 这里有源码
= projectionMatrix; GLKMatrix4 modelViewMatrix = GLKMatrix4Translate(GLKMatrix4Identity, 0.0f 是透视投影变换 GLKMatrix4Translate是平移变换 /** * 场景数据变化 */ - (void)update { GLKMatrix4 modelViewMatrix = GLKMatrix4Translate(GLKMatrix4Identity, 0.0f, 0.0f, -2.0f); modelViewMatrix = GLKMatrix4RotateX = modelViewMatrix; } 在场景变换函数里面,GLKMatrix4RotateY是绕Y轴旋转,其他的分分别是绕X、Z轴旋转。 4、深度测试 在前面的教程介绍过,开启深度测试需要分配深度测试的缓冲区,并挂载到相应的帧缓冲区。 在GLKit代码中,深度测试的开启十分简单。
前言 在前俩篇文章中,我与大家分享了 UE4 开发如何配置 Xcode 调试环境以及如何实现 UE4 引擎的按钮事件响应,其实写这俩篇文章的目的就是为接下来的文章做一个引子,就好比是高级餐厅的前菜一样, 既然 UE4 引擎具有跨平台的特性,那是否真的能像很多跨平台开发工具所说的一样:Write once, run everywhere 呢! ,iOS 平台就用 OC 或者 swift 开发,Android就用 java 或者 kotlin 开发,所以完全就不用去考虑它的平台兼容性问题了。 UE4 开发之如何创建 iOS 平台插件 UE4 为我们广大开发者提供了众多的插件供我们使用,正是有了这些插件的存在,才让游戏开发变得更快更简单,今天我跟大家分享一下如何开发 UE4 插件。 包裹 最后,插上真机设备,在工程中设置好相应的签名证书,CMD+R 将工程跑在真机设备上: •触发按钮事件,调用 SDK 里面的接口 •获取回调信息,并打印 结尾 这就是 UE4 引擎创建 iOS
storyboard进行界面设计固然不错,特别是对于初学者经常会使用设计器进行界面设计,但是实际开发过程中我们很多情况下会直接使用代码进行界面布局,特别是对于复杂的界面布局更是如此。 小编有个自己学习交流群681503716(验证编号:大鲨)在iOS学习道路上的小伙伴可以加一下哦~ 直接在Xcode中创建“Empty Application”(注意在Xcode6中这个选项已经没有了, UIView就是指界面可见的控件元素,所有的控件最终都继承自UIView,UIView中还可以添加其他UIView(通过addSubView方法); 在一个iOS应用中必须有一个主窗口UIWindow( 下面我们看一下应用程序最终的布局,相信通过这张图大家对于iOS的布局会有一个大致了解: a2.png
关于动画 在移动开发中,为了提高用户体验,会用到一些动画来提高应用的视觉效果。让人有眼前一亮的感觉。同时有动画的过渡过程,会让应用看起来不是那么的生硬,更吸引用户。 所以它能实现的功能还是有限的,但是一般的开发中是够用的。UIView动画是封装自CoreAnimation的,下面会讲到。 ? self.aniView.frame = CGRectMake(200, 80, 100, 100); // 提交动画执行 [UIView commitAnimations]; Block用法 // iOS4 80, 100, 100); } completion:^(BOOL finished) { NSLog(@"动画执行完了"); }]; Spring动画(带弹簧效果) iOS7 以后引入的Spring动画,iOS8的时候Apple开放的Spring动画的API,开发者可以借助这个API很简单的实现带有弹簧的动画效果了。
即使有了bugly,也需要知道奔溃是如何捕捉的。 注意:自定义NSSetUncaughtExceptionHandler之后,会导致bugly失效,需要注意!!
iOS RC4加密 iOS RC4加密的实现,要注意加密后生成字符串的步骤,有些要求是base64加密后输出,有些要求是字节数组转16进制字符串输出,所以要特别注意。 代码如下: // rc4加密 - (NSString *)rc4Encode:(NSString *)aInput key:(NSString *)aKey { NSMutableArray * - (NSString *)rc4Decode:(NSString *)data key:(NSString*)secret{ // 如果是16进制字符串 NSData *raw = } NSData *data = [NSData dataWithBytes:buf length:len]; free( buf ); return data; } 参考 iOS ,objectC,RC4加密解密方法 iOS 二进制数组转成16进制字符串
导入AsynSocket库,导入CFNetwork系统库 1.新建single view工程 ViewController.h文件 #import <UIKit/UIKit.h> #import "AsyncSocket.h" @interface ViewController : UIViewController <AsyncSocketDelegate> { NSMutableArray *_socketArray; AsyncSocket *_sendSocke
会出现怎样的结果, 相信接下来的语句 每一个做过开发人员都应该见过 unrecognized selector sent to instance 0x7ffee1e90f00 。 利用 Objective-C 的 Runtime 特性,我们可以自己来对语言进行扩展,解决项目开发中的一些设计和技术问题。
解决密钥配送问题 由消息的接收者,生成一对公钥、私钥 将公钥发给消息的发送者 消息的发送者使用公钥加密消息 16.png RSA 目前使用最广泛的公钥密码算法是RSA RSA的名字,由它的3位开发者 签名机制 iOS签名机制的作用 保证安装到用户手机上的APP都是经过Apple官方允许的 不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤 生成CertificateSigningRequest.certSigningRequest Xcode已经自动帮开发者做了以上操作 思考 每一步的作用是什么? 设备的公钥 39.png 3、iOS签名机制 – 获得证书 40.png 4、ios_development.cer、ios_distribution.cer文件 利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件 41.png 5、iOS签名机制 – 生成mobileprovision 42.png 43.png 6、iOS签名机制 – 安全检测 44.png 7、iOS签名机制 - AppStore 如果APP
在iOS 3.0以及更高版本中,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。 这个网上的资料都说的很不全面,尤其是蓝色字部分。 对于iOS2.x,你还必须在调用super dealloc方法前将这些引用置为nil。
4.一个线程对应一个RunLoop,主线程的RunLoop默认已经启动 5.子线程的RunLoop得手动启动(调用run方法) 6.RunLoop只能选择一个Mode启动,如果当前Mode中没有任Source // 1 kCFRunLoopBeforeTimers = (1UL << 1), // 2 kCFRunLoopBeforeSources = (1UL << 2), // 4 第4个参数:优先级(0) 第5个参数:监听状态改变后的回调 */ CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler Paste_Image.png Runloop:在开发中有什么作用? 1.NSTimer 2.ImageView的显示 3.PerformSelector 4.常驻线程 5.自动释放池 PerformSelector - (void)touchesBegan:(NSSet
, 在 iOS 开发中主要用于代码签名, 保障 iOS 生态的健康安全, 分为开发者证书和发布者证书 什么时候需要证书 只有在本机模拟器调试时无需代码签名, 当 App 需要在真机运行和发布时需要使用相应证书进行签名 (ios_development.cer) 打包和发布 描述文件(Provisioning Profiles) 可用于发布的开发者证书(ios_distribution.cer) 消息推送后端服务 由 apple 官方颁发, 用来证明开发者资格的证书文件, 分开发(ios_development.cer)和发布(ios_distribution.cer)两种 cer 证书跟开发机(私钥)绑定只能在拥有私钥的机器上使用 xcode 登录开发者帐号后可以连接开发者中心获取 附录1: 开发准备相关的网址 开发者中心 https://developer.apple.com/devcenter/ios/index.action , 不需要准备描述文件, xcode 会自动生成(如果是公司帐号可以自动生成 iOS Team Provisioning Profile) 共享开发者帐号 如果无法在 xcode 登录一个开发者帐号,
iOS开发概述 •什么是IOS •什么是IOS开发 •为什么要选择IOS开发 •学习IOS开发的准备 1.什么是iOS •iOS是一款由苹果公司开发的操作系统(OS是Operating System的简称 •iOS开发就是开发运行在搭载iOS系统上的应用或者游戏软件,也就是可以开发一些运行在iPhone上的软件,比如手机QQ、微博或者游戏。 说白了,就是开发手机软件。当然,也包括iPad版的软件 •自2010年iPhone4的出现,国内掀起一股iOS开发浪潮。 但由于开发门槛教高等因素,开发者并不多 •从事iOS开发的人员,可以称之为“iOS软件攻城狮”或“iOS程序猿” •iOS开发可以归类到“移动开发”(手机开发)领域 4.为什么要选择移动开发 •手机将是人类最离不开的设备之一 在iphone,ipad,itouch上开发软件 3.IOS平台下的开发和安卓下的开发各有什么优缺点? 4.IOS下开发所需要的条件。
iOS APP开发的发展前景如何?进入新的一年,不仅竞争越来越激烈,而且技术环境也在发生变化。IOS APP的发展现状主要是受市场影响,一些客观因素影响了整体运营。 IOS APP开发的现状在于通信的变化,系统必须跟上发展。从当前的用户反馈来看,仍有许多方面需要改进,例如产品的易用性和产品的灵活性。封闭系统具有局限性,但是具有很高的安全性。 新产品支持5G,但是对于APP,在开发过程中需要考虑很多事情,包括如何将5G技术集成到产品中,以及如何使产品在使用过程中更稳定是开发团队必须考虑的所有事情,因此技术要求很高。 就现在的行情来说,大多数的人是不是认为iOS已经人满为患了呢?移动开发目前趋向于饱和,但优秀的人才永远是少数,如果要入行的话,找一个好的团队然后疯狂的学习最重要,初级的开发越来越泛滥了。 来源:公众号 iOS进阶宝典
zxp_testString { return objc_getAssociatedObject(self, @selector(zxp_testString)); } @end</objc> 2.2 便捷开发宏定义 该调试工具非常强大,结合storyboard一起使用可以很好的支撑ios开发的页面布局调整/性能优化等需求,具体的功能这里不一一展开,请开发人员在使用中进行总结和摸索。 <mpmediaplayback> { void *_internal; // 4 = 0x4 BOOL _readyForDisplay; // 8 = 0x8 }</mpmediaplayback 开发中如何区分IOS版本 // 当前系统支持的最小版本 __IPHONE_OS_VERSION_MIN_REQUIRED // 当前系统支持的最大版本 __IPHONE_OS_VERSION_MAX_ALLOWED 灰神内存优化链接地址点此 7 参考链接 iOS SDK:那些关于iOS调试的技巧 http://dev.yesky.com/62/34881062.shtml iOS自定义NSLog日志 http
需要输入开发者账号!如果没有账号也没关系,在下面也可以选择Debug、Realease、inHouse模式下对应的证书也可以! 是在NSObjCRuntime.h中定义的,作为Xcode7.3.1的一部分,我们设定常熟范围从iPhone OS 2到#define NSFoundationVersionNumber_iOS_8_4 NSFoundationVersionNumber_iOS_9_4 1280.25 #define NSFoundationVersionNumber_iOS_9_x_Max 1299 三、隐私数据访问问题 122816-135f4a89ba4b0ee5.png 这是因为iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都需要添加描述,但是,在使用Xcode 8之前的Xcode还是使用系统的权限通知框 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大。
本文要讲的不是教你如何去实现一个统计模块,毕竟大部分的公司不会自己去开发一套统计系统。这里要讲的是如何方便优雅的集成第三方的统计系统,如:友盟等。 一般的埋点都是每个要统计的地方都加一句埋点代码,你刚毕业的时候这么写没有问题,但是如果你做了几年的软件开发,还这样写,那就是你的错了。这样分散的代码,不易于修改,不易于维护,还不易于测试。 所以,做为一个有点经验的开发,我们应该要想有没有其它的方法来实现。一般的埋点就是在方法的开头或者结尾插入一句统计的代码。它不影响方法的运行。基于这样的要求。自然而然的就会想到,这是对方法进行AOP了。 在iOS里面可以通过runtime来实现。 学了几年iOS,现在工作中偶尔写一点iOS相关的经验文章。Objective-C,Swift,RxSwift等。欢迎查看往期文章,喜欢的可以点个关注。
学习任何一门编程语言目的是能够用它进行相应的开发工作,在Swift语法学习完成以后,接下来就是用它来进行iOS或者Mac开发。 本人自己录制的Swift4+Xcode10+iOS开发基础教程(上)课程,在腾讯课堂上线了,欢迎感兴趣的同学前来围观、学习、批评、指正。 [课程封面.png]
Android上可以使用framebuffer_fetch_depth_stencil, 但是iOS上不支持DepthFetch. 所以就尝试使用MRT输出一个R16F的Depth, 需要依赖FramebufferFetchMRT的实现. 4.26中UE4已经增加了延迟渲染, FramebufferFetchMRT已经实现了vk和 代码写完后发现iOS上SubpassFetchR_1()怎么也不起作用(DepthFade的物体没了), 使用XCode GPU Frame Capture看了一下Shader, 结果发现gl_LastFragDataR