Ios 在swift中检查视图的背景色
例如,假设我有一个白色背景,那么每次触摸视图时,屏幕上都会添加一个大小为60x60的蓝色框。如果我一直在屏幕上点击,直到整个视图变成蓝色,我如何使用代码通知用户,例如使用警报控制器,告诉用户视图现在已完全改变颜色Ios 在swift中检查视图的背景色,ios,swift,Ios,Swift,例如,假设我有一个白色背景,那么每次触摸视图时,屏幕上都会添加一个大小为60x60的蓝色框。如果我一直在屏幕上点击,直到整个视图变成蓝色,我如何使用代码通知用户,例如使用警报控制器,告诉用户视图现在已完全改变颜色 如果这对任何人来说都是有意义的,我将感谢任何建议:正如其他人所说,最好的方法是保留对2D数组的引用以与UI关联。首先,我会: 1创建名为overlayView的UIView子类。这将是视图控制器视图顶部的视图覆盖。此子类将重写initframe:CGRect。您可以在初始化时实现NxM
如果这对任何人来说都是有意义的,我将感谢任何建议:正如其他人所说,最好的方法是保留对2D数组的引用以与UI关联。首先,我会: 1创建名为overlayView的UIView子类。这将是视图控制器视图顶部的视图覆盖。此子类将重写initframe:CGRect。您可以在初始化时实现NxM网格。您还将根据需要创建和添加子视图 例如:
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)
}
}
}
2覆盖触摸BeganTouches:NSSet,覆盖视图中包含事件:UIEvent。实现应该如下所示:
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()
}
}
}
2a您还需要创建一个函数来通知2D阵列此子视图已被删除。这将从if语句中调用。此外,此函数将检测数组是否为空,所有值都设置为false
或
2b如果您不需要对模型的引用,您不关心点击了哪些框,只关心它们是否全部消失,您可以跳过2a并检查self.subviews.count==0。如果是这种情况,则根本不需要二维阵列。如果此条件通过,您可以根据需要向用户提供警报
3在主视图控制器中创建覆盖视图,并将其添加为子视图 箱子是否卡在某个位置?也就是说,如果我点击20,40,它会从0,0填充到60,60还是从20-30,40-30填充到20+30,40+30?@milo526是的,框显示在你点击的同一位置,一旦你点击了所有地方,最终填充屏幕。@zouv然后你可以按照@milo256所说的做,在屏幕上,您可以将其视为一个NxM表格,其中每个方格的大小为60x60,如果单元格被标记为true或false,则视为true,如果所有单元格都被标记,则显示您的警报。@VictorSigler有趣的想法,感谢您的输入!非常感谢你花时间做这一切,这对我很有帮助。真的很感激!