新聞中心
iOS-OC和Swift相互混合開發(fā)(OC&Swift混編)
在ios的OC和Swift混合開發(fā)無非是2種,一種是在OC的項(xiàng)目中使用Swift語言開發(fā),這里就需要?jiǎng)?chuàng)建Swift文件(或者引用Swift寫的的第三方庫),另一種是在Swift項(xiàng)目中使用OC語言開發(fā),這里就需要?jiǎng)?chuàng)建OC文件,(或者引用OC寫的的第三方庫)
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),陽西網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:陽西等地區(qū)。陽西做網(wǎng)站價(jià)格咨詢:13518219792
首先我們在一個(gè)已有的OC的項(xiàng)目中,創(chuàng)建一個(gè)Swift文件
這里Xcode就會(huì)自動(dòng)提示我們?nèi)纾簣D1
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?
提示我們創(chuàng)建一個(gè)橋接的頭文件,當(dāng)我點(diǎn)擊 “ Create? Bridging Header”,Xcode就給我們自動(dòng)創(chuàng)建,自動(dòng)創(chuàng)建的規(guī)則是:項(xiàng)目名+ "-Bridging-Header.h" 如圖2
同時(shí)在項(xiàng)目中創(chuàng)建一個(gè)Swift文件
然后在在 targets - Build Settings - Packaging 中設(shè)置Defines Module 為YES
設(shè)置完后開始使用,怎么在oc中使用Swift的類呢?
重點(diǎn): 在文件中引用 #import "ocProjectUseSwift-Swift.h"? 記住不是我創(chuàng)建的SecondVC.swift,是“項(xiàng)目名-Swift.h"文件名 ,引入這個(gè)文件就引入了所有的Swift文件內(nèi)的類、方法、屬性
說明:這個(gè)文件是系統(tǒng)自動(dòng)創(chuàng)建,自動(dòng)添加所有我們創(chuàng)建的Swift的類的方法和屬性
前提是要在方法和屬性前面要加@objc 如圖3:
用@objc聲明好之后,在我們引用的是“項(xiàng)目名-Swift.h"文件名的?#import "ocProjectUseSwift-Swift.h" 內(nèi)就看到有標(biāo)記了如圖4
這里分了3塊,紅色和綠色標(biāo)記框內(nèi)是我們自己標(biāo)記的oc可用的屬性和方法,藍(lán)色框內(nèi)是系統(tǒng)自己生成的oc可以初始化方法
具體使用就在oc文件中,如圖5:
此事,在這個(gè)OC創(chuàng)建的項(xiàng)目中,我們創(chuàng)建的Swift文件怎么使用OC創(chuàng)建的類呢?
這里就用到我們創(chuàng)建的橋接頭文件了,在圖2中的橋接頭文件,引入OC的頭文件,如圖6
就這樣很簡單,所以Swift文件的類都可以使用這個(gè)OC文件內(nèi)的類了,使用起,和OC調(diào)用OC的類一樣,如如圖7和圖8
Swift的項(xiàng)目中,第一次創(chuàng)建OC的文件,此時(shí)系統(tǒng)會(huì)自動(dòng)幫我們創(chuàng)建橋接頭文件,如圖9
然后就有了和圖2一樣的橋接頭文件,剩下的就和圖6一樣,在橋接頭文件內(nèi)引入頭文件,即可使用OC的類,第三方庫如果也是OC寫的,在引入的時(shí)候也自動(dòng)會(huì)加這個(gè)橋接頭文件,當(dāng)然一個(gè)項(xiàng)目只能加一次,加過的就不需要加了
Cocoapods,讓iOS開發(fā)更簡單(三):實(shí)踐經(jīng)驗(yàn)匯總
相信各位讀了之前的兩篇文章,對pods的使用已經(jīng)相當(dāng)熟練了。不過在紛繁復(fù)雜的實(shí)際使用場景下,可能還是會(huì)遇到一些問題。本文就結(jié)合自己的實(shí)踐經(jīng)驗(yàn),做一些快問快答,希望大家能多多補(bǔ)充交流。話不多說,那我們就即刻開始吧!
pod系列文章
Cocoapods,讓iOS開發(fā)更簡單(一):走近Cocoapods
Cocoapods,讓iOS開發(fā)更簡單(二):創(chuàng)建私有庫
Cocoapods,讓iOS開發(fā)更簡單(三):實(shí)踐經(jīng)驗(yàn)匯總
一文帶你快速分清靜態(tài)庫-動(dòng)態(tài)庫-Framework
一般推薦使用指定版本或范圍版本號,以確保依賴的穩(wěn)定性。
總結(jié) :能用pod install解決問題的,就不要用pod update。因?yàn)閜od update會(huì)把依賴庫全部檢查一遍,不僅慢有時(shí)候還會(huì)出現(xiàn)坑。
忽略Pods警告,有些第三方Pod集成進(jìn)來會(huì)有一大堆警告信息,在Podfile中對應(yīng)的target或分組下加上關(guān)鍵字inhibit_all_warnings!就可以把警告忽略。
作用:
在pods中用frameworks替代.a靜態(tài)庫。
場景:
swift項(xiàng)目pods默認(rèn)開啟(use_frameworks!),OC項(xiàng)目pods默認(rèn)關(guān)閉(#use_frameworks!),同時(shí)需滿足以下兩點(diǎn),
解析:
swift工程依賴了OC工程的話,需要use_modular_headers!
示例:
為某個(gè) Pods 使用模塊化標(biāo)頭,可以使用以下語法:
pod 'TestPodLib', :modular_headers = true
另外,當(dāng)全局使用 use_modular_headers! 屬性時(shí),同時(shí)還可以使用以下方法從模塊化標(biāo)頭中排除特定的Pod:
pod 'TestPodLib', :modular_headers = false
版本格式:主版本號.次版本號.修訂號,版本號遞增規(guī)則如下:
常用的方式調(diào)用pod中的素材是不生效的,因?yàn)槟J(rèn)是從mainBundle中讀取的,如
打在pod中的素材已經(jīng)不在mainBundle中而在對應(yīng)組件下的bundle 里面,所以應(yīng)該這么調(diào)用:
在用CocoaPods集成第三方庫之后,默認(rèn)情況下,使用類似#import XXX/YYY.h的方式引入第三方庫的頭文件。
pod search只會(huì)搜索本地緩存的庫,如果想搜索到最新的第三方框架或者某個(gè)框架的最新版本,必須先使用pod repo update。
ios是什么意思
iOS是由蘋果公司開發(fā)的移動(dòng)操作系統(tǒng)。蘋果公司最早于2007年1月9日的Macworld大會(huì)上公布這個(gè)系統(tǒng),最初是設(shè)計(jì)給iPhone使用的,后來陸續(xù)套用到iPod touch、iPad上。iOS與蘋果的macOS操作系統(tǒng)一樣,屬于類Unix的商業(yè)操作系統(tǒng)。
原本這個(gè)系統(tǒng)名為iPhone OS,因?yàn)閕Pad,iPhone,iPod touch都使用iPhone OS,所以2010年WWDC上宣布改名為iOS(iOS為美國Cisco公司網(wǎng)絡(luò)設(shè)備操作系統(tǒng)注冊商標(biāo),蘋果改名已獲得Cisco公司授權(quán))。
功能控件:
1、窗口
UIWindow,iPhone的規(guī)則是一個(gè)窗口,多個(gè)視圖,窗口是你在app顯示出來你看到的最底層,他是固定不變的,基本上可以不怎么理會(huì),但要知道每層是怎樣的架構(gòu)。
2、視圖
UIView,是用戶構(gòu)建界面的基礎(chǔ),所有的控件都是在這個(gè)頁面上畫出來的,你可以把它當(dāng)成是一個(gè)畫布,你可以通過UIView增加控件,并利用控件和用戶進(jìn)行交互和傳遞數(shù)據(jù)。
窗口和視圖是最基本的類,創(chuàng)建任何類型的用戶界面都要用到。窗口表示屏幕上的一個(gè)幾何區(qū)域,而視圖類則用其自身的功能畫出不同的控件,如導(dǎo)航欄,按鈕都是附著視圖類之上的,而一個(gè)視圖則鏈接到一個(gè)窗口。
3、視圖控制器
視圖控制器UIViewController,你可以把他當(dāng)成是對你要用到視圖UIView進(jìn)行管理和控制,你可以在這個(gè)UIViewController控制你要顯示的是哪個(gè)具體的UIView。另外,視圖控制器還增添了額外的功能,比如內(nèi)建的旋轉(zhuǎn)屏幕,轉(zhuǎn)場動(dòng)畫以及對觸摸等事件的支持。
ios開發(fā)怎么使用 cgcontextmovetopoint
CGContextRef context = UIGraphicsGetCurrentContext(); 設(shè)置上下文
1
CGContextMoveToPoint 開始畫線
2 CGContextAddLineToPoint 畫直線
4
CGContextAddEllipseInRect 畫一橢圓
4 CGContextSetLineCap 設(shè)置線條終點(diǎn)形狀
4
CGContextSetLineDash 畫虛線
4 CGContextAddRect 畫一方框
4 CGContextStrokeRect
指定矩形
4 CGContextStrokeRectWithWidth 指定矩形線寬度
4
CGContextStrokeLineSegments 一些直線
5
CGContextAddArc 畫已曲線 前倆店為中心 中間倆店為起始弧度 最后一數(shù)據(jù)為0則順時(shí)針畫 1則逆時(shí)針
5
CGContextAddArcToPoint(context,0,0, 2, 9, 40);//先畫倆條線從point 到 弟1點(diǎn), 從弟1點(diǎn)到弟2點(diǎn)的線
切割里面的圓
6 CGContextSetShadowWithColor 設(shè)置陰影
7
CGContextSetRGBFillColor 這只填充顏色
7 CGContextSetRGBStrokeColor
畫筆顏色設(shè)置
7 CGContextSetFillColorSpace 顏色空間填充
7
CGConextSetStrokeColorSpace 顏色空間畫筆設(shè)置
8 CGContextFillRect
補(bǔ)充當(dāng)前填充顏色的rect
8 CGContextSetAlaha 透明度
9
CGContextTranslateCTM 改變畫布位置
10 CGContextSetLineWidth 設(shè)置線的寬度
11
CGContextAddRects 畫多個(gè)線
12 CGContextAddQuadCurveToPoint 畫曲線
13
CGContextStrokePath 開始繪制圖片
13 CGContextDrawPath 設(shè)置繪制模式
14
CGContextClosePath 封閉當(dāng)前線路
15 CGContextTranslateCTM(context, 0,
rect.size.height); CGContextScaleCTM(context, 1.0, -1.0);反轉(zhuǎn)畫布
16
CGContextSetInterpolationQuality 背景內(nèi)置顏色質(zhì)量等級
16
CGImageCreateWithImageInRect 從原圖片中取小圖
17
字符串的寫入可用 nsstring本身的畫圖方法 – (CGSize)drawInRect:(CGRect)rect withFont:(UIFont
*)font lineBreakMode:(UILineBreakMode)lineBreakMode
alignment:(UITextAlignment)alignment;來寫進(jìn)去即可
18對圖片放大縮小的功能就是慢了點(diǎn)
UIGraphicsBeginImageContext(newSize);
UIImage*
newImage =
UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
19
CGColorGetComponents() 返回顏色的各個(gè)直 以及透明度 可用只讀c*****t float 來接收是個(gè)數(shù)組
20
畫圖片 CGImageRef image=CGImageRetain(img.CGImage);
CGContextDrawImage(context,
CGRectMake(10.0, height –
100.0, 90.0, 90.0), image);
21
實(shí)現(xiàn)逐變顏色填充方法 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來填充形狀內(nèi)的顏色.
填充一個(gè)路徑的時(shí)候,路徑里面的子路徑都是獨(dú)立填充的。
假如是重疊的路徑,決定一個(gè)點(diǎn)是否被填充,有兩種規(guī)則
1,nonzero
winding number
rule:非零繞數(shù)規(guī)則,假如一個(gè)點(diǎn)被從左到右跨過,計(jì)數(shù)器+1,從右到左跨過,計(jì)數(shù)器-1,最后,如果結(jié)果是0,那么不填充,如果是非零,那么填充。
2,even-odd
rule: 奇偶規(guī)則,假如一個(gè)點(diǎn)被跨過,那么+1,最后是奇數(shù),那么要被填充,偶數(shù)則不填充,和方向沒有關(guān)系。
蘋果公司的iOS系統(tǒng)是基于什么開發(fā)的?
蘋果公司的iOS系統(tǒng)是由蘋果公司開發(fā)的移動(dòng)操作系統(tǒng)。
Cisco的網(wǎng)際操作系統(tǒng)(iOS)是一個(gè)為網(wǎng)際互連優(yōu)化的操作系統(tǒng)--類似一個(gè)局域操作系統(tǒng)(NOS)、如Novell的 NetWare,為LANs而進(jìn)行優(yōu)化。iOS為長時(shí)間有效地維護(hù)一個(gè)互聯(lián)網(wǎng)絡(luò)提供了統(tǒng)一的規(guī)則。簡而言之,它是一個(gè)與硬件分離的軟件體系結(jié)構(gòu),隨網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,可動(dòng)態(tài)地升級以適應(yīng)不斷變化的技術(shù)(硬件和軟件)。
如何才能系統(tǒng)的學(xué)習(xí) iOS 開發(fā),理解一些規(guī)則和深層次的機(jī)制原理
本人覺得學(xué)iOS開發(fā),首先心態(tài)要好,不要想著已經(jīng)學(xué)習(xí)很長時(shí)間了,可以找個(gè)好工作,可以賺錢了,牛人除外,不過大多都是普通人。
先慢慢培養(yǎng)興趣下定決心,然后開始找資料,找視頻,查百度。等覺得這些基礎(chǔ)的都差不多理解了,那就別看書,將精力集中于界面開發(fā)、一定的數(shù)據(jù)庫開發(fā)、通訊接口開發(fā)、協(xié)同開發(fā)與聯(lián)調(diào)。然后自己設(shè)計(jì)個(gè)東西,可以涵蓋他們的,做個(gè)自己想做的東西出來,雖然可能很難,但是會(huì)在過程中學(xué)到很多,是別人教不會(huì)的。
在學(xué)習(xí)過程中遇到什么問題,可以百度一下看看別人的回答,看多了印象就深了,也就慢慢掌握了。遇到什么思路上的問題,可以來論壇發(fā)帖,論壇肯定會(huì)有人來幫忙的,就算不能完全解決,也可以提供點(diǎn)參考。學(xué)習(xí)要會(huì)利用資源,論壇上那么好的資源不用可惜的哦,還有資料堆的東西,只要能掌握70%,不相信可以試試。
等學(xué)完了UI后,可以想想搞點(diǎn)數(shù)據(jù)的存儲(chǔ)的東西,比如做個(gè)網(wǎng)絡(luò)圖片收集的,里面涉及網(wǎng)絡(luò)連接,圖片保存,UI線程安全,數(shù)據(jù)庫操作等等,又可以學(xué)到好多,何樂而不為呢。等學(xué)完這些,已經(jīng)算不錯(cuò)了,接下去就要做點(diǎn)大的項(xiàng)目,最好是有客戶端和服務(wù)器的,也練習(xí)下數(shù)據(jù)操作,了解下http協(xié)議,了解下wifi,了解下電話短信googlemap的等知識。如果是游戲,那么還需要涉及到引擎、建模、素材、光影、故事板等。推薦兩本經(jīng)典入門書籍《objective-c基礎(chǔ)教程》和《iphone4和ipad開發(fā)基礎(chǔ)教程》。
當(dāng)然有興趣的話可以在中間看看iOS的源碼。
最后,等上層應(yīng)用的東西基本學(xué)完了,學(xué)點(diǎn)底層的,就做點(diǎn)調(diào)用底層的東西,深入了解下,就可以做很多東西了,比如3D游戲性能提高,編碼解碼等等。
說實(shí)在的,技術(shù)課程,自己學(xué)還是有點(diǎn)難度的,一方面自學(xué)對個(gè)人自制力是巨大的考驗(yàn),另一方面,很多代碼、語法自己琢磨費(fèi)時(shí)費(fèi)力最主要是很多時(shí)候還琢磨不透。
新聞標(biāo)題:ios開發(fā)規(guī)則,iOS規(guī)則
新聞來源:http://fisionsoft.com.cn/article/dscscie.html