Ios 如何在swift 3.0中归档uiview所有属性 enum TetrisItemEnum{ 案例S 案例Z 案例一 案例J 案例一 案例O 案例T 变量rowcol:[(行:Int,列:Int)]{ 切换自身{ 案例S:返回[(1,0)、(2,0)、(0,1)、(1,1)] 案例Z:返回[(0,0)、(1,0)、(1,1)、(2,1)] 案例1:返回[(0,0)、(0,1)、(0,2)、(1,2)] 案例J:返回[(1,0)、(1,1)、(1,2)、(0,2)] 案例一:返回[(0,0)、(0,1)、(0,2)、(0,3)] 案例O:返回[(0,0)、(0,1)、(1,0)、(1,1)] 案例T:返回[(0,0)、(1,0)、(2,0)、(1,1)] 违约: 返回[] } } 变量背景大小:(行:Int,列:Int){ 切换自身{ 案例S:返回(3,2) 案例Z:返回(3,2) 案例1:返回(2,3) 案例J:返回(2,3) 案例一:返回(1,4) 案例O:返回(2,2) 案例T:返回(3,2) 违约: 返回(0,0) } } 变量颜色:UIColor{ 切换自身{ case.S:返回UIColor.init(hexString:#FD9E20FF”)! case.Z:返回UIColor.init(hexString:#FECE30FF”)! case.L:返回UIColor.init(hexString:#56C2F0FF”)! case.J:返回UIColor.init(hexString:#28C35BFF”)! case.I:返回UIColor.init(hexString:#FA6464FF”)! case.O:返回UIColor.init(hexString:#22BFADFF”)! case.T:返回UIColor.init(hexString:#FC80C3FF”)! 违约: 返回,白色 } } 静态let allValues=[S,Z,L,J,I,O,T] } 类TetrisItemView:UIView{ 变量形状:TetrisItemEnum! 静态函数makeTetrisItem(形状:TetrisItemEnum)->TetrisItemView{ 让rspace:CGFloat=Global.rspace 让cspace:CGFloat=Global.cspace let width:CGFloat=Global.width let height:CGFloat=Global.height 设bgrect=CGRect.init(x:0,y:0,width:width*CGFloat(shape.backgroundSize.row),height:height*CGFloat(shape.backgroundSize.col)) 让bgview=TetrisItemView.init(帧:bgrect) bgview.shape=形状 对于shape.rowcol中的(i,j){ 设rect=CGRect.init(x:width*CGFloat(i)+rspace*(CGFloat(i)-1),y:height*CGFloat(j)+cspace*(CGFloat(j)-1),width:width,height:height); let view=UIView.init(帧:rect) view.backgroundColor=shape.color bgview.addSubview(视图) } 返回bgview } func clone()->TetrisItemView{ 让view=NSKeyedUnarchiver.unarchiveObject(带:NSKeyedArchiver.archivedData(带rootobject:self))!as!TetrisItemView 返回视图 } 覆盖func hitTest(uPoint:CGPoint,带有事件:UIEvent?->UIView{ 用于在self.subview中查看{ 如果point.x>view.frame.minX&&point.xview.frame.minY&&point.y
当我克隆uiview时,它被正确地复制了。 但shape属性为零。 如何克隆所有属性以正确保存形状。它在swift3.1中 我的代码有什么问题Ios 如何在swift 3.0中归档uiview所有属性 enum TetrisItemEnum{ 案例S 案例Z 案例一 案例J 案例一 案例O 案例T 变量rowcol:[(行:Int,列:Int)]{ 切换自身{ 案例S:返回[(1,0)、(2,0)、(0,1)、(1,1)] 案例Z:返回[(0,0)、(1,0)、(1,1)、(2,1)] 案例1:返回[(0,0)、(0,1)、(0,2)、(1,2)] 案例J:返回[(1,0)、(1,1)、(1,2)、(0,2)] 案例一:返回[(0,0)、(0,1)、(0,2)、(0,3)] 案例O:返回[(0,0)、(0,1)、(1,0)、(1,1)] 案例T:返回[(0,0)、(1,0)、(2,0)、(1,1)] 违约: 返回[] } } 变量背景大小:(行:Int,列:Int){ 切换自身{ 案例S:返回(3,2) 案例Z:返回(3,2) 案例1:返回(2,3) 案例J:返回(2,3) 案例一:返回(1,4) 案例O:返回(2,2) 案例T:返回(3,2) 违约: 返回(0,0) } } 变量颜色:UIColor{ 切换自身{ case.S:返回UIColor.init(hexString:#FD9E20FF”)! case.Z:返回UIColor.init(hexString:#FECE30FF”)! case.L:返回UIColor.init(hexString:#56C2F0FF”)! case.J:返回UIColor.init(hexString:#28C35BFF”)! case.I:返回UIColor.init(hexString:#FA6464FF”)! case.O:返回UIColor.init(hexString:#22BFADFF”)! case.T:返回UIColor.init(hexString:#FC80C3FF”)! 违约: 返回,白色 } } 静态let allValues=[S,Z,L,J,I,O,T] } 类TetrisItemView:UIView{ 变量形状:TetrisItemEnum! 静态函数makeTetrisItem(形状:TetrisItemEnum)->TetrisItemView{ 让rspace:CGFloat=Global.rspace 让cspace:CGFloat=Global.cspace let width:CGFloat=Global.width let height:CGFloat=Global.height 设bgrect=CGRect.init(x:0,y:0,width:width*CGFloat(shape.backgroundSize.row),height:height*CGFloat(shape.backgroundSize.col)) 让bgview=TetrisItemView.init(帧:bgrect) bgview.shape=形状 对于shape.rowcol中的(i,j){ 设rect=CGRect.init(x:width*CGFloat(i)+rspace*(CGFloat(i)-1),y:height*CGFloat(j)+cspace*(CGFloat(j)-1),width:width,height:height); let view=UIView.init(帧:rect) view.backgroundColor=shape.color bgview.addSubview(视图) } 返回bgview } func clone()->TetrisItemView{ 让view=NSKeyedUnarchiver.unarchiveObject(带:NSKeyedArchiver.archivedData(带rootobject:self))!as!TetrisItemView 返回视图 } 覆盖func hitTest(uPoint:CGPoint,带有事件:UIEvent?->UIView{ 用于在self.subview中查看{ 如果point.x>view.frame.minX&&point.xview.frame.minY&&point.y,ios,swift,Ios,Swift,当我克隆uiview时,它被正确地复制了。 但shape属性为零。 如何克隆所有属性以正确保存形状。它在swift3.1中 我的代码有什么问题 云你能告诉我怎么做吗?谢谢。在行中,让S=TetrisItemView.MakeTrisItem(shape:shape)我不知道在何处以及如何创建shape,能否在将其添加到MakeTrisItem之前打印它?代码位于TetrisItemView calss静态函数MakeTrisItem。您应该滚动它以查看。在第行中,让S=TetrisItemVie
云你能告诉我怎么做吗?谢谢。在
行中,让S=TetrisItemView.MakeTrisItem(shape:shape)
我不知道在何处以及如何创建shape
,能否在将其添加到MakeTrisItem
之前打印它?代码位于TetrisItemView calss静态函数MakeTrisItem。您应该滚动它以查看。在第行中,让S=TetrisItemView.MakeTrisItem(shape:shape)
我看不出您在何处以及如何创建shape
,您可以在将其添加到MakeTrisItem
之前打印它吗?代码位于TetrisItemView calss静态函数MakeTrisItem。您应该滚动它来查看。
enum TetrisItemEnum {
case S
case Z
case L
case J
case I
case O
case T
var rowcol:[(row:Int,col:Int)] {
switch self {
case .S: return [(1,0),(2,0),(0,1),(1,1)]
case .Z: return [(0,0),(1,0),(1,1),(2,1)]
case .L: return [(0,0),(0,1),(0,2),(1,2)]
case .J: return [(1,0),(1,1),(1,2),(0,2)]
case .I: return [(0,0),(0,1),(0,2),(0,3)]
case .O: return [(0,0),(0,1),(1,0),(1,1)]
case .T: return [(0,0),(1,0),(2,0),(1,1)]
default:
return []
}
}
var backgroundSize:(row:Int, col:Int) {
switch self {
case .S: return (3,2)
case .Z: return (3,2)
case .L: return (2,3)
case .J: return (2,3)
case .I: return (1,4)
case .O: return (2,2)
case .T: return (3,2)
default:
return (0,0)
}
}
var color:UIColor {
switch self {
case .S: return UIColor.init(hexString: "#FD9E20FF")!
case .Z: return UIColor.init(hexString: "#FECE30FF")!
case .L: return UIColor.init(hexString: "#56C2F0FF")!
case .J: return UIColor.init(hexString: "#28C35BFF")!
case .I: return UIColor.init(hexString: "#FA6464FF")!
case .O: return UIColor.init(hexString: "#22BFADFF")!
case .T: return UIColor.init(hexString: "#FC80C3FF")!
default:
return .white
}
}
static let allValues = [S, Z, L, J, I, O, T]
}
class TetrisItemView:UIView {
var shape:TetrisItemEnum!
static func makeTetrisItem(shape:TetrisItemEnum) -> TetrisItemView {
let rspace:CGFloat = Global.rspace
let cspace:CGFloat = Global.cspace
let width:CGFloat = Global.width
let height:CGFloat = Global.height
let bgrect = CGRect.init(x: 0, y: 0, width: width*CGFloat(shape.backgroundSize.row), height: height*CGFloat(shape.backgroundSize.col))
let bgview = TetrisItemView.init(frame: bgrect)
bgview.shape = shape
for (i,j) in shape.rowcol {
let rect = CGRect.init(x: width*CGFloat(i)+rspace*(CGFloat(i)-1), y: height*CGFloat(j)+cspace*(CGFloat(j)-1), width: width, height: height);
let view = UIView.init(frame: rect)
view.backgroundColor = shape.color
bgview.addSubview(view)
}
return bgview
}
func clone() -> TetrisItemView {
let view = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self))! as! TetrisItemView
return view
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
for view in self.subviews {
if point.x > view.frame.minX && point.x < view.frame.maxX
&& point.y > view.frame.minY && point.y < view.frame.maxY {
return view
}
}
return nil
}
}
//use
let S = TetrisItemView.makeTetrisItem(shape: shape)
let L = S.clone()
print(L.shape)