激活/停用代码

Posted

技术标签:

【中文标题】激活/停用代码【英文标题】:Activate/deactivate code 【发布时间】:2017-07-27 20:09:56 【问题描述】:

试图获取代码,因此当if whiteDotDist < centerRadius - whiteDotRadius 被执行时,它下面的所有代码都处于活动状态,当它下面的代码被执行时,它再次变为非活动状态,直到再次执行if whiteDotDist < centerRadius - whiteDotRadius。有点像一个循环,所以你必须从中心到 smallDot 不断地往回走。很难用电脑解释。更新它给我错误'二进制运算符'

@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()  
    
    
    

【问题讨论】:

如果你知道两个圆的中心和半径,你可以使用intersectingPointsOfCircles:这个要点中的函数:gist.github.com/akhilcb/8d03f1f88f87e996aec24748bdf0ce78。如果它在里面,它会将两个点都返回为零。框架包含不会为您处理边缘情况,其中小圆圈在内部但框架重叠。 这很有帮助,但并不能真正回答我的问题。我试图更新问题以更清楚感谢您的帮助! inactive,你的意思是说你想让定时器失效?然后在 else 部分调用定时器对象的无效。它会停止。如果你想让我把这个作为答案,请告诉我。在 if 条件中添加 else 子句后,它应该可以工作。 我的意思是所有代码都不会在非活动状态下工作。除非whiteDot位于中心,否则这一切都不会起作用,然后它下面的代码将全部处于活动状态并正常工作,然后当'if(whiteDot.frame.contains(smallDot.frame)&& smallDot.image!= nil) " 执行后代码再次变为非活动状态,直到 whiteDot 居中,因此每次 whiteDot 居中时,它都会激活其下方的代码,因此每次都必须先居中然后 whiteDot。 是的,您应该将else 部分添加到if whiteDotDist &lt; centerRadius - whiteDotRadius 条件,然后在那里使您的计时器无效。 【参考方案1】:

检查以确保:

    所有视图都具有相同的父级(因此它们都在同一坐标系中)

    框架紧紧围绕着圆圈。将center、whiteDot、smallDot的背景色改为红色并贴图

即使您这样做,您的代码也会检查边界矩形是否在彼此内部,因此它可能看起来像 smallDot 在 whiteDot 之外(如果它在角落里),但边界框被 whiteDot 的框架包围.

如果您想检查圆圈(不是边界框)是否在彼此内部,请获取中心之间的距离并确保其在(外半径 - 较小的点半径)范围内。

伪代码

   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
   

【讨论】:

还有一个问题,当“if whiteDotDist 另外我在这个问题中更新了我的代码,你输入的代码不起作用。

以上是关于激活/停用代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中激活/停用菜单项

UICollectionReusableView 约束未更新

NSLayoutConstraint 激活/停用

如何激活以前停用的约束?

使用 CheckButton 激活或停用按钮

iOS如何激活/停用某个尺寸类(方向)的布局约束?