2016-06-14 165 views
1

我有一个包含4个用UIBezierPath制作的圆圈的视图的应用程序。只在视图第一次显示时出现viewDidAppear动作

view with circles

而且你可以在某个圈子单击以获取有关项目

view with details

的事情是一个细节,圆是有一些限制的子视图,所以我可以不要在viewDidLoad方法中绘制它们(我试过但它是一团糟),所以整个绘图工作都是在viewDidAppear方法中完成的,但是每次出现视图时都会绘制圆。

所以,如果我点击了一圈再回来的圆圈查看了大量的时间,我结束了:

view with circles after I went to check the details a lot for any circle

我也试过用viewDidLayoutSubviews方法,但我得到一个无限循环。所以我问是否有人有想法来处理这个问题。 (可能最干净的方式)

这是我的viewDidAppear样子:

override func viewDidAppear(animated: Bool) { 
     createCircle(firstCircle, text: "Breathe", color: blue, directionForAdjustment: 1, identifier: 0) 
     createCircle(secondCircle, text: "Cocoon", color: green, directionForAdjustment: 1, identifier: 1) 
     createCircle(thirdCircle, text: "Smokeless", color: cyan, directionForAdjustment: -1, identifier: 2) 
     createCircle(fourthCircle, text: "Sleep", color: purple, directionForAdjustment: -1, identifier: 3) 
} 
+0

只需添加一个标志在它的init圈后 –

+0

你的圈子值的变化? 之后没有任何改变,你是写代码的viewdidload方法。 –

回答

2

如果你想这个代码来执行,只有当视图出现在第一时间,只需添加一个布尔变量,上面写着“被初始化“。如果不在viewDidAppear中运行代码,则将其设置为true。

+0

这是我过去做过很多次的方式。 –

+0

为什么我没有想到这一点.. –

1

您可以覆盖并添加viewDidLayoutSubviews中的UI自定义,在super viewDidLayoutSubviews之后绑定的子视图在屏幕上是正确的,并且每次出现视图时都不会执行。

编辑: 无限循环的问题可能是您在createCircle方法中调用setNeedsLayout。我想你应该重新考虑viewDidLayoutSubviews和你的createCircle逻辑,因为它应该是你想要的最佳流程。

1

您还可以使用dispatch_once

class YourClass: UIViewController { 
    static var once: dispatch_once_t = 0 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     _dispatch_once(&YourClass.once) { 
      self.viewDidAppearFirstTime() 
     }  
    } 

    func viewDidAppearFirstTime() { 
     createCircle(firstCircle, text: "Breathe", color: blue, directionForAdjustment: 1, identifier: 0) 
     createCircle(secondCircle, text: "Cocoon", color: green, directionForAdjustment: 1, identifier: 1) 
     createCircle(thirdCircle, text: "Smokeless", color: cyan, directionForAdjustment: -1, identifier: 2) 
     createCircle(fourthCircle, text: "Sleep", color: purple, directionForAdjustment: -1, identifier: 3) 
    } 
} 
相关问题