斯坦福Developing iOS 8 Apps学习笔记(一)
2015-09-07 10:19
169 查看
Logistics, iOS 8 Overview, Swift, Foundation
第一、二、三、四节课感觉是比较杂乱的一些Cocoa和Swift知识Printable协议
遵守Printable协议可以在print(“(someElement)”)时正确地输出enum的使用
enum在Swift中是一个非常好用的东西,对于一个值可能有几种枚举值的情况一定要使用enum,并且Swift的enum可以链接属性值,使用起来非常方便NSNumber
NSNumberFormatterNSNumber有doubleVlue,intValue等,在Swift中NSNumber用处不大,但要注意NSNumberFormatter能够方便地进行类型转化
var stringNumber = "123" var formatter = NSNumberFormatter() var intNumber = formatter.numberFromString(stringNumber)
NSDate
NSCalendarNSDateFormatter
NSDateComponent
let formatter = NSDateFormatter() if NSData().timeIntervalSinceData(tweet.created)>24*60*60 formatter.dataStyle = NSDataFormatterStyle.shortStyle else formatter.timeStyle = NSDataFormatterStyle.shortStyle tweetCreatedLabel?.text = formatter.stringFromDate(tweet.created)
NSData
NSData的本质是一个比特包Swift Array
Filtermap
reduce
var array = [1,2,3,4,5] var array1 = array.filter { return $0 > 3 } println(array1) var array2 = array.map { (initial) -> String in return "\(initial)" } println(array2) var sum = array.reduce(0, combine: { (sum, toAdd) -> Int in return sum + toAdd }) println(sum)
Swift String
Swift String不能简单地使用str[2]形式来访问其中的字符,因为Unicode字符可能由多位构成,使用String.index类型来作为索引,依靠advance函数来获取String.index索引var str = "Hello" let index = advance(str.startIndex, 2) str.splice("abc", atIndex: index) //str = "Heabcllo" let startIndex = advance(str.startIndex, 2) let endIndex = advance(str.startIndex, 5) let subString = str[startIndex...endIndex] //subString = "abcl" var array3 = ["!","?",":"] var str1 = str.join(array3) //str1 = "!Heabcllo?Heabcllo:" str.componentsSeparatedByString("c") // ["Heab", "llo"]
一些有用的全局函数
countElements(a collection)sub = dropFirst(a sliceable)
sub = dropLast(a sliceable)
first = first(a collection)
last = last(a collection)
prefix = prefix(a sliceable, x : Int)
suffix = suffix(a sliceable, x : Int)
reversed : Array = reverse(a collection)
backwards : String = String(reverse(s))
绘图相关
CGRect类
minXmidY
intersects(CGRect) -> Bool 是否相交
intersect(CGRect) 两矩形相交的部分
contains(CGPoint) -> Bool
这其中的单位是Point点(可以包含多个像素),可由contentScaleFactor属性获得
bounds和frame的关系
bounds是自身的坐标系,用于在自身视图中定位center和frame相对于父系坐标系,与绘制无关,用于定位父视图中的此视图
在view中绘图
在view中绘图,使用override func drawRect(regionThatNeedsToBeDrawn:CGRect)
永远不要自己调用drawRect。Instead, uses
setNeesDisplay() setNeedsDisplayInRect(regionThatNeedsToBeDrawn:CGRect)
绘图两种方式
Core Graphics① context上下文 UIGraphicsGetCurrentContext()
② Create Path(lines,arcs, etc.)
③ drawing attributes(colors,font,textures,linewidths,linecaps,…)
④ stroke or fill paths with attributes
UIBezierPath(面向对象封装,更好用一些)
① don’t worry arbout context
② lineto,arcs,… linewidth
③ fill or stroke
let path = UIBezierPath() path.moveToPoint(CGPoint(x: 80, y: 50)) path.addLineToPoint(CGPoint(x: 140, y: 150)) path.addLineToPoint(CGPoint(x: 20, y: 30)) path.closePath() UIColor.greenColor().setFill() path.lineWidth = 3.0 path.fill() let roundRect = UIBezierPath(roundedRect: CGRect(x: 50, y: 50, width: 50, height: 50), cornerRadius: 5) let oval = UIBezierPath(ovalInRect: CGRect(x: 50, y: 50, width: 100, height: 100)) roundRect.addClip() //可以用于用圆角矩形Clip纸牌图案 oval.containsPoint(CGPoint(x: 70, y: 70))
UIColor
支持RGB,HSB,pattern(UIImage)let transparentYellow = UIColor.yellowColor().colorWithAlphaComponent(0.5)
透明绘制意味着opaque=false, hidden = false
文字绘制
- NSForegroundColorAttributeName:UIColor - NSStrokeWidthAttributeName:CGFloat - NSFontAttributeName:UIFont 其中UIFont一般情况下我们可以使用以下方法 - UIFont.preferredFontForTextStyle(UIFontTextStyle) ->UIFont - UIFontTextStyle{Headline,Body,Footnote...} - UIFont.systemFontOfSize(pointSize:CGFloat) -> UIFont - UIFont.bodysystemFontOfSize(pointSize:CGFloat) -> UIFont
文字绘制按照上面的代码作为模板即可,其中attributes有以下设置。
NSForeGrounColorAttributeName:UIColor
NSStrokeWidthAttributeName:CGFloat
NSFontAttributeName:UIFont
UIFont可以通过以下方法来得到
UIFont.preferredFontForTextStyle(UIFontTextStyle) -> UIFont
UIFontTextStyle{Headline, Body, Footnote}
UIFont.systemFontOfSize(pointSize:CGFloat) -> UIFont
UIFont.boldSystemFontOfSize(pointSize:CGFloat) -> UIFont
其中system的字体一般用于segmented Controller等这些系统控件中的文字,User Content一般是preferredFont。
图像绘制
image = UIImage(named:"foo") UIImage(contentsOfFile:String) UIImage(data:NSData) image.drawAtPoint(CGPoint) iamge.drawInRect(CGRect) image.drawAsPatternInRect(CGRect) //平铺
需要注意的
当UIView的bounds改变的时候(例如旋转设备,AutoLayout使得bounds改变),以上绘制是没有redraw的,需要改变UIView的contentMode(storyboard或是代码中都可以改)UIViewContentMode
.Left/.Right/…/.BottomLeft/.Center
.ScaleToFill(Default)/.ScaleAspectFill(保持长宽比例填满imageView,可能有部分图片显示不出来)/.ScaleAspectFit(保持长宽比例尽可能大的撑imageView,imageView可能有空白)
一个很好用的方法:convertPoint(CGPoint, fromView:UIView)
感谢斯坦福大学的公开课程,白胡子老爷爷讲得真的很棒,为知识的分享点赞!课程链接,仅用于知识分享。如有错误或是遗漏,敬请指正!
相关文章推荐
- Android基础入门教程——5.2.5 Fragment实例精讲——新闻(购物)类App列表Fragment的简单实现
- Unity 2D游戏开发教程之精灵的死亡和重生
- 9月4日 XE8移动开发入门(四)XE8在Android中调用SQLite和IBLite数据库
- 仿微信界面滑动(9.7)
- IOS中懒加载
- iOS开源库
- android 应用性能提升
- Android开发之软键盘遮盖EditText
- Unity性能优化之LOD Group
- 阅读《Android 从入门到精通》(1)——了解 Android 开发
- iOS学习--NSCalendar
- Android控件之一 (TextView)
- unity3d软件各个历史版本下载
- struts2中的constant介绍之struts.objectFactory与spring的整合
- 利用fsck修复/dev/mapper/VolGroup-lv_root: unexpected inconsistency; run fsck manually
- Maven 2 + Hibernate 3.2 + MySQL Example (XML Mapping)
- 微信分享
- 获取webview的高度
- android-点击文字收缩效果
- iOS中3种正则表达式的使用与比较