比方说我有一个白色背景,然后每次触摸视图时,屏幕上会添加一个蓝色的盒子(60x60)。如果我一直在屏幕上点击直到整个视图变为蓝色,我该如何使用代码通知用户使用例如警报控制器说视图现在已完全改变颜色。
如果这对任何人都有意义,我将不胜感激任何建议:)
答案 0 :(得分:0)
正如其他人所说,最好的方法是保持对2D数组的引用以与UI相关联。我会先解决这个问题:
1)创建一个名为UIView
的{{1}}子类。这将是视图控制器顶部的视图叠加层。 overlayView
。该子类将覆盖view
。您可以在初始化时实现NxM网格。您还将根据需要创建和添加子视图。
示例:
init(frame: CGRect)
2)覆盖let boxWidth: CGFloat = 60
let boxHeight: CGFloat = 60
let boxFrame: CGRect = CGRectMake(0, 0, 600, 600)
override init(frame: CGRect) {
super.init(frame: boxFrame)
for i in 1 ... 10 { //row
for j in 1...10 { //column
let xCoordinate: CGFloat = CGFloat(CGFloat(i) * boxWidth)
let yCoordinate: CGFloat = CGFloat(CGFloat(j) * boxHeight)
let boxFrame: CGRect = CGRect(x: xCoordinate, y: yCoordinate, width: boxWidth, height: boxHeight)
var subView: UIView = UIView(frame: boxFrame)
subView.backgroundColor = UIColor.greenColor()
self.addSubview(subView)
}
}
}
内的touchesBegan(touches: NSSet, withEvent event: UIEvent)
。实现应该如下所示:
overlayView
2a)您还需要创建一个函数来通知您的2D数组已删除此子视图。这将在您的override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
let touch: UITouch = touches.anyObject() as UITouch
let touchLocation: CGPoint = touch.locationInView(self)
for subView in self.subviews {
if(CGRectContainsPoint(subView.frame, touchLocation)) {
subView.removeFromSuperview()
}
}
}
声明中调用。此外,此函数将检测数组是否为空(所有值都设置为if
)
OR
2b)如果你不需要对模型的引用(你不关心哪些框被点击只是他们已经全部消失了),你可以跳过2a并检查是否false
。如果是这种情况,则根本不需要2D阵列。如果此条件通过,您可以根据需要向用户显示警报。
3)在主视图控制器中创建self.subviews.count == 0
并将其添加为子视图。