在UIVIEW类前加入 @IBDesignable 就会在Storyboard里绘制你的操作
属性操作前加入@IBInspectable 就会在Storyboard中的属性窗口进行设置
Extensions
扩展不能扩展已存在的方法,属性
添加的属性不能有存储,属性只能有get和set
Protocol(协议)
一个协议就是一个数据类型,协议本身没有实现只有声明.实现由其他遵从协议的对象实现
protocol SomeProtocol: InheritedProtocol1, InheritedProtocol2 {
var someProtocol:Int {get set}
func aMethod(arg1:Double,anotherArgument:String) -> SomeType
mutating func changIt()
init(arg:Type)
}
协议间可以实现继承
设置属性只能有get set 或许只能是get只读属性
任何可能会被更改的函数还需要mutating关键字标注
协议:类名.代表了这个协议只能被类实现不能被一个sturct或者enum实现
可以设定使类或者结果体去实现特定的初始化方法
实现
class SomeClass: superclassOfSomeClass,SomeProtocol,AnotherProtocol
enum SomeEnum:SomeProtocol,AnotherProtocol
protocol Moveable {
mutating func moveTo(p:CGPoint)
}
class Car: Moveable {
func moveTo(p:CGPoint){...}
func changeOil()
}
struct Shape: Moveable {
matating func moveTo(P:CGPoint){…}
fun draw()
}
let prius:Car = Car()
let square:Shape = Shape()
Delegation
代理首先第一步要创建一个代理,,这个代理协议是一个协议包含了许多方法,可能还有属性接着在view中创建一个属性称作代理或者有时jhiao数据源类型就是将要代理的数据类型,协议就是类型.
控制器首先实现了这个协议,接着控制器将它自身作为代理对象接着这个类必须实现协议规定的必须(required)实现的所有方法这样就遵循了协议
协议后面写上class证明只能被类所实现
weak为内存管理 ??表达式表示.如果左边的值不为nil就使用左边的值,不然就使用右边的值
手势管理
UIGestureRecognizer 不能创建的父类.只能创建他的子类
使用手势识别器有两个步骤.首先是为视图添加手势识别器,第二部就是创建了手势识别器你必须制定一个对象,如果视图识别了这个手势
手势一般是添加到控制器来完成的
Scroll View可以自动识别拖动和缩放手势
监听手势方法之一
@IBOutlet weak var pannableView:UIView {
didSet{
let recognizer = UIPanGestureRecoginzer(target:self,action”pan:”)
pannableView.addGestureRecoginzer(recognizer)
}
}
target表示在控制器里的.因为只能在控制器里才能监听手势动作.
action则表示执行的方法名字带冒号则表示这个方法有参数.填写参数即可有冒号还可以得到手点击的位置,建议都带冒号
func translationInView(view:UIView) -> CGPoint //告诉你手势被识别或重置开始
func velocityInView(view:UIView) -> CGPoint //手指移动了多远的距离
func setTranslation(translation:CGPoint,inView:UIView) //重置起点
var state: UIGestureRecognizerState{get}
.Possible //表示他或许可能是一个拖动手势
.Recognizer //扫动或一个非连续手势
.Began //拖动既手势是连续的
.Changed //随着手指移动
.Ended //当手指离开屏幕
func pan(gesture: UIPanGestureRecognizer) {
switch gesture.state{
case .Changed:fallthrough
case .Ended:
let translation = gesture.translationInView(pannableView)
gesture.setTranslation(CGPointZero,inView:pannableView)
default:break
}
}
缩放(pinch)
UIPinchGestureRecognizer
var scale: CGFloat //传值的不是坐标而是比例开始时候scale为1
var velocity: CGFloat{get}
旋转(Rotation)
UIRotationGestureRecognizer
var rotation: CGFloat //fan得知物体旋转了多少弧度
var velocity: CGFloat{get}
滑动(swipes)
UISwipeGestureRecognizer
var direction: UISwipeGestureRecoginzerDirection //滑动方向
var numberOfTouchesRequired: Int //指头数目
点击(Tap)
UITapGestureRecognizer//可以关注点击两次
var numberOfTapsRequired: Int //一个点击,两次点击
var numberOfTouchesRequired: Int //指头数目