尝试获取代码,以便在执行if whiteDotDist < centerRadius - whiteDotRadius
时,其下面的所有代码都处于活动状态,当执行下面的代码时,它会再次变为非活动状态,直到再次执行if whiteDotDist < centerRadius - whiteDotRadius
为止。有点像循环,所以你必须继续往前走,从中心到小点。很难用电脑解释。更新它给我错误'二元运算符'&lt;'不能应用于'CGFloat'和'Double'类型的操作数
@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
let centerRadius = 37.5
let whiteDotRadius = 23.5
let whiteDotDist = hypot(center.center.x - whiteDot.center.x, center.center.y - whiteDot.center.y - whiteDot.center.y)
if whiteDotDist < centerRadius - whiteDotRadius {
resetTimer() }
if (whiteDot.frame.contains(smallDot.frame) && smallDot.image != nil) {
addOne += 1
score.text = "\(addOne)"
resetTimer()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(SecondViewController.startTimer), userInfo: nil, repeats: true)
smallDot.center = spawnRandomPosition()
}
}
}
答案 0 :(得分:1)
检查以确保:
所有视图都具有相同的父级(因此它们都在相同的坐标系中)
框架紧紧围绕着圆圈。将center,whiteDot和smallDot的背景颜色更改为红色并发布图片
即使你这样做,你的代码也会检查边界是否在彼此内部,所以看起来像smallDot在whiteDot之外(如果它在角落里),但是边界框由whiteDot&#包围39; s frame。
如果要检查圆圈(非边界框)是否在彼此内部,请获取中心之间的距离,并确保它在(外半径 - 较小的点半径)内。
伪代码
let centerRadius = 100 // set this to radius of center circle
let whiteDotRadius = 10 // set this to whiteDot radius
let whiteDotDist = hypotf(center.center.x - whiteDot.center.x, center.center.y - whiteDot.center.y)
if whiteDotDist < centerRadius - whiteDotRadius {
// whiteDot is inside center
}