重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在ios的OC和Swift混合开发无非是2种,一种是在OC的项目中使用Swift语言开发,这里就需要创建Swift文件(或者引用Swift写的的第三方库),另一种是在Swift项目中使用OC语言开发,这里就需要创建OC文件,(或者引用OC写的的第三方库)
成都创新互联是一家专注于网站设计、网站制作与策划设计,阳西网站建设哪家好?成都创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:阳西等地区。阳西做网站价格咨询:13518219792
首先我们在一个已有的OC的项目中,创建一个Swift文件
这里Xcode就会自动提示我们如:图1
Would you like to configure an Objective-C bridging header?
Adding this file to ocProjectUseSwift will create a mixed Swift and Objective-C target. Would you like Xcode to automatically configure a bridging header to enable classes to be accessed by both languages?
提示我们创建一个桥接的头文件,当我点击 “ Create Bridging Header”,Xcode就给我们自动创建,自动创建的规则是:项目名+ "-Bridging-Header.h" 如图2
同时在项目中创建一个Swift文件
然后在在 targets - Build Settings - Packaging 中设置Defines Module 为YES
设置完后开始使用,怎么在oc中使用Swift的类呢?
重点: 在文件中引用 #import "ocProjectUseSwift-Swift.h" 记住不是我创建的SecondVC.swift,是“项目名-Swift.h"文件名 ,引入这个文件就引入了所有的Swift文件内的类、方法、属性
说明:这个文件是系统自动创建,自动添加所有我们创建的Swift的类的方法和属性
前提是要在方法和属性前面要加@objc 如图3:
用@objc声明好之后,在我们引用的是“项目名-Swift.h"文件名的 #import "ocProjectUseSwift-Swift.h" 内就看到有标记了如图4
这里分了3块,红色和绿色标记框内是我们自己标记的oc可用的属性和方法,蓝色框内是系统自己生成的oc可以初始化方法
具体使用就在oc文件中,如图5:
此事,在这个OC创建的项目中,我们创建的Swift文件怎么使用OC创建的类呢?
这里就用到我们创建的桥接头文件了,在图2中的桥接头文件,引入OC的头文件,如图6
就这样很简单,所以Swift文件的类都可以使用这个OC文件内的类了,使用起,和OC调用OC的类一样,如如图7和图8
Swift的项目中,第一次创建OC的文件,此时系统会自动帮我们创建桥接头文件,如图9
然后就有了和图2一样的桥接头文件,剩下的就和图6一样,在桥接头文件内引入头文件,即可使用OC的类,第三方库如果也是OC写的,在引入的时候也自动会加这个桥接头文件,当然一个项目只能加一次,加过的就不需要加了
相信各位读了之前的两篇文章,对pods的使用已经相当熟练了。不过在纷繁复杂的实际使用场景下,可能还是会遇到一些问题。本文就结合自己的实践经验,做一些快问快答,希望大家能多多补充交流。话不多说,那我们就即刻开始吧!
pod系列文章
Cocoapods,让iOS开发更简单(一):走近Cocoapods
Cocoapods,让iOS开发更简单(二):创建私有库
Cocoapods,让iOS开发更简单(三):实践经验汇总
一文带你快速分清静态库-动态库-Framework
一般推荐使用指定版本或范围版本号,以确保依赖的稳定性。
总结 :能用pod install解决问题的,就不要用pod update。因为pod update会把依赖库全部检查一遍,不仅慢有时候还会出现坑。
忽略Pods警告,有些第三方Pod集成进来会有一大堆警告信息,在Podfile中对应的target或分组下加上关键字inhibit_all_warnings!就可以把警告忽略。
作用:
在pods中用frameworks替代.a静态库。
场景:
swift项目pods默认开启(use_frameworks!),OC项目pods默认关闭(#use_frameworks!),同时需满足以下两点,
解析:
swift工程依赖了OC工程的话,需要use_modular_headers!
示例:
为某个 Pods 使用模块化标头,可以使用以下语法:
pod 'TestPodLib', :modular_headers = true
另外,当全局使用 use_modular_headers! 属性时,同时还可以使用以下方法从模块化标头中排除特定的Pod:
pod 'TestPodLib', :modular_headers = false
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
常用的方式调用pod中的素材是不生效的,因为默认是从mainBundle中读取的,如
打在pod中的素材已经不在mainBundle中而在对应组件下的bundle 里面,所以应该这么调用:
在用CocoaPods集成第三方库之后,默认情况下,使用类似#import XXX/YYY.h的方式引入第三方库的头文件。
pod search只会搜索本地缓存的库,如果想搜索到最新的第三方框架或者某个框架的最新版本,必须先使用pod repo update。
iOS是由苹果公司开发的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。
原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010年WWDC上宣布改名为iOS(iOS为美国Cisco公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。
功能控件:
1、窗口
UIWindow,iPhone的规则是一个窗口,多个视图,窗口是你在app显示出来你看到的最底层,他是固定不变的,基本上可以不怎么理会,但要知道每层是怎样的架构。
2、视图
UIView,是用户构建界面的基础,所有的控件都是在这个页面上画出来的,你可以把它当成是一个画布,你可以通过UIView增加控件,并利用控件和用户进行交互和传递数据。
窗口和视图是最基本的类,创建任何类型的用户界面都要用到。窗口表示屏幕上的一个几何区域,而视图类则用其自身的功能画出不同的控件,如导航栏,按钮都是附着视图类之上的,而一个视图则链接到一个窗口。
3、视图控制器
视图控制器UIViewController,你可以把他当成是对你要用到视图UIView进行管理和控制,你可以在这个UIViewController控制你要显示的是哪个具体的UIView。另外,视图控制器还增添了额外的功能,比如内建的旋转屏幕,转场动画以及对触摸等事件的支持。
CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文
1
CGContextMoveToPoint 开始画线
2 CGContextAddLineToPoint 画直线
4
CGContextAddEllipseInRect 画一椭圆
4 CGContextSetLineCap 设置线条终点形状
4
CGContextSetLineDash 画虚线
4 CGContextAddRect 画一方框
4 CGContextStrokeRect
指定矩形
4 CGContextStrokeRectWithWidth 指定矩形线宽度
4
CGContextStrokeLineSegments 一些直线
5
CGContextAddArc 画已曲线 前俩店为中心 中间俩店为起始弧度 最后一数据为0则顺时针画 1则逆时针
5
CGContextAddArcToPoint(context,0,0, 2, 9, 40);//先画俩条线从point 到 弟1点, 从弟1点到弟2点的线
切割里面的圆
6 CGContextSetShadowWithColor 设置阴影
7
CGContextSetRGBFillColor 这只填充颜色
7 CGContextSetRGBStrokeColor
画笔颜色设置
7 CGContextSetFillColorSpace 颜色空间填充
7
CGConextSetStrokeColorSpace 颜色空间画笔设置
8 CGContextFillRect
补充当前填充颜色的rect
8 CGContextSetAlaha 透明度
9
CGContextTranslateCTM 改变画布位置
10 CGContextSetLineWidth 设置线的宽度
11
CGContextAddRects 画多个线
12 CGContextAddQuadCurveToPoint 画曲线
13
CGContextStrokePath 开始绘制图片
13 CGContextDrawPath 设置绘制模式
14
CGContextClosePath 封闭当前线路
15 CGContextTranslateCTM(context, 0,
rect.size.height); CGContextScaleCTM(context, 1.0, -1.0);反转画布
16
CGContextSetInterpolationQuality 背景内置颜色质量等级
16
CGImageCreateWithImageInRect 从原图片中取小图
17
字符串的写入可用 nsstring本身的画图方法 – (CGSize)drawInRect:(CGRect)rect withFont:(UIFont
*)font lineBreakMode:(UILineBreakMode)lineBreakMode
alignment:(UITextAlignment)alignment;来写进去即可
18对图片放大缩小的功能就是慢了点
UIGraphicsBeginImageContext(newSize);
UIImage*
newImage =
UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
19
CGColorGetComponents() 返回颜色的各个直 以及透明度 可用只读c*****t float 来接收是个数组
20
画图片 CGImageRef image=CGImageRetain(img.CGImage);
CGContextDrawImage(context,
CGRectMake(10.0, height –
100.0, 90.0, 90.0), image);
21
实现逐变颜色填充方法 CGContextClip(context);
CGColorSpaceRef rgb =
CGColorSpaceCreateDeviceRGB();
CGFloat colors[] =
{
204.0 / 255.0,
224.0 / 255.0, 244.0 / 255.0, 1.00,
29.0 / 255.0, 156.0 / 255.0, 215.0 /
255.0, 1.00,
0.0 / 255.0, 50.0 / 255.0, 126.0 / 255.0,
1.00,
};
CGGradientRef gradient =
CGGradientCreateWithColorComponents
(rgb, colors, NULL,
sizeof(colors)/(sizeof(colors[0])*4));
CGColorSpaceRelease(rgb);
CGContextDrawLinearGradient(context,
gradient,CGPointMake
(0.0,0.0)
,CGPointMake(0.0,self.frame.size.height),
kCGGradientDrawsBeforeStartLocation);
22
注: 画完图后,必须
先用CGContextStrokePath来描线,即形状
后用CGContextFillPath来填充形状内的颜色.
填充一个路径的时候,路径里面的子路径都是独立填充的。
假如是重叠的路径,决定一个点是否被填充,有两种规则
1,nonzero
winding number
rule:非零绕数规则,假如一个点被从左到右跨过,计数器+1,从右到左跨过,计数器-1,最后,如果结果是0,那么不填充,如果是非零,那么填充。
2,even-odd
rule: 奇偶规则,假如一个点被跨过,那么+1,最后是奇数,那么要被填充,偶数则不填充,和方向没有关系。
苹果公司的iOS系统是由苹果公司开发的移动操作系统。
Cisco的网际操作系统(iOS)是一个为网际互连优化的操作系统--类似一个局域操作系统(NOS)、如Novell的 NetWare,为LANs而进行优化。iOS为长时间有效地维护一个互联网络提供了统一的规则。简而言之,它是一个与硬件分离的软件体系结构,随网络技术的不断发展,可动态地升级以适应不断变化的技术(硬件和软件)。
本人觉得学iOS开发,首先心态要好,不要想着已经学习很长时间了,可以找个好工作,可以赚钱了,牛人除外,不过大多都是普通人。
先慢慢培养兴趣下定决心,然后开始找资料,找视频,查百度。等觉得这些基础的都差不多理解了,那就别看书,将精力集中于界面开发、一定的数据库开发、通讯接口开发、协同开发与联调。然后自己设计个东西,可以涵盖他们的,做个自己想做的东西出来,虽然可能很难,但是会在过程中学到很多,是别人教不会的。
在学习过程中遇到什么问题,可以百度一下看看别人的回答,看多了印象就深了,也就慢慢掌握了。遇到什么思路上的问题,可以来论坛发帖,论坛肯定会有人来帮忙的,就算不能完全解决,也可以提供点参考。学习要会利用资源,论坛上那么好的资源不用可惜的哦,还有资料堆的东西,只要能掌握70%,不相信可以试试。
等学完了UI后,可以想想搞点数据的存储的东西,比如做个网络图片收集的,里面涉及网络连接,图片保存,UI线程安全,数据库操作等等,又可以学到好多,何乐而不为呢。等学完这些,已经算不错了,接下去就要做点大的项目,最好是有客户端和服务器的,也练习下数据操作,了解下http协议,了解下wifi,了解下电话短信googlemap的等知识。如果是游戏,那么还需要涉及到引擎、建模、素材、光影、故事板等。推荐两本经典入门书籍《objective-c基础教程》和《iphone4和ipad开发基础教程》。
当然有兴趣的话可以在中间看看iOS的源码。
最后,等上层应用的东西基本学完了,学点底层的,就做点调用底层的东西,深入了解下,就可以做很多东西了,比如3D游戏性能提高,编码解码等等。
说实在的,技术课程,自己学还是有点难度的,一方面自学对个人自制力是巨大的考验,另一方面,很多代码、语法自己琢磨费时费力最主要是很多时候还琢磨不透。