【问题标题】:how reference storyboard (current view) from another normal class如何从另一个普通类中引用故事板(当前视图)
【发布时间】:2014-11-13 12:47:26
【问题描述】:

我想在 viewDidLoad 方法调用的类(在我的正常视图之外)中创建一个动画,并让它在故事板上运行:

如何将班级效果与班级ViewController(故事板)联系起来??

class ViewController : UIViewController
   {
       var effetto:Effects = Effects()

       override func viewDidLoad()
      {
           super.viewDidLoad()
           effects.typeEffects = 1
           effects.createEffect
      }
   }

   class Effects {

       var squareView: UIView!
       var gravity: UIGravityBehavior!
       var animator: UIDynamicAnimator!
       var collision: UICollisionBehavior!

       var typeEffects = 0

       func createEffect()
       {
          If var typeEffect = 1){
             gravity()
          } else {
             other()
          }
       }

       func gravity()
       {
        squareView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        squareView.backgroundColor = UIColor.blueColor()
        viewController.addSubview(squareView)

        animator = UIDynamicAnimator(referenceView: viewControlle)
        gravity = UIGravityBehavior(items: [squareView])
        animator.addBehavior(gravity)

        collision = UICollisionBehavior(items: [squareView])
        collision.translatesReferenceBoundsIntoBoundary = true
        // collision.addBoundaryWithIdentifier("barrier", fromPoint:  CGPointMake(self.view.frame.origin.x, 350), toPoint: CGPointMake(self.view.frame.origin.x + self.view.frame.width, 350))
        animator.addBehavior(collision)
       }
       func other()
       {
         ......
       }

    }

【问题讨论】:

    标签: ios iphone ipad swift


    【解决方案1】:

    简而言之,您不会将非子类对象与情节提要中的任何内容挂钩。您的 UIViewController 的类名是非描述性的,但它仍然可以工作并包含 Effects 类的实例。在 viewDidLoad 上,您正在创建该类的实例。只需在 IB 的身份检查器中输入 ViewController 作为类名。否则,将其命名为更具描述性,如下所示,然后在身份检查器中添加 EffectsViewController 如果它令人困惑。像下面这样的东西应该可以工作(未经测试,纯粹是为了显示对象传递)

    class EffectsViewController : UIViewController
       {
           var effects:Effects = Effects()
    
           override func viewDidLoad()
          {
               super.viewDidLoad()
               effects.effectsViewController = self
               effects.typeEffects = 1
               effects.createEffect
          }
       }
    
       class Effects {
           var effectsViewController: EffectsViewController!
           var squareView: UIView!
           var gravity: UIGravityBehavior!
           var animator: UIDynamicAnimator!
           var collision: UICollisionBehavior!
    
           var typeEffects = 0
    
           func createEffect()
           {
              If var typeEffect = 1){
                 gravity()
              } else {
                 other()
              }
           }
    
           func gravity()
           {
            squareView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
            squareView.backgroundColor = UIColor.blueColor()
            effectsViewController.addSubview(squareView)
    
            animator = UIDynamicAnimator(referenceView: viewControlle)
            gravity = UIGravityBehavior(items: [squareView])
            animator.addBehavior(gravity)
    
            collision = UICollisionBehavior(items: [squareView])
            collision.translatesReferenceBoundsIntoBoundary = true
            // collision.addBoundaryWithIdentifier("barrier", fromPoint:  CGPointMake(self.view.frame.origin.x, 350), toPoint: CGPointMake(self.view.frame.origin.x + self.view.frame.width, 350))
            animator.addBehavior(collision)
           }
           func other()
           {
             ......
           }
    
        }
    

    【讨论】:

      【解决方案2】:

      只需在情节提要中选择 ViewController。然后转到右侧窗格中的身份检查器。最重要的选项是选择班级。

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 2012-09-08
        • 2017-05-14
        • 2017-02-22
        • 2013-09-17
        • 2017-01-04
        • 2017-12-15
        • 2011-12-01
        • 2014-11-13
        相关资源
        最近更新 更多