将方法从一个类重写到另一个类

时间:2016-03-31 16:11:11

标签: ios swift uiscrollview override

将一个scrollView和两个视图控制器连接到scrollView 现在我想访问一个View Controllers类到包含scrollView的类的方法。所以我可以使用方法scrollViewDidEndDeclerating。如果我在同一个班级中尝试scrollViewDidEndDeclerating,它将无法执行。但如果我试图覆盖该方法。我得到一个致命的错误。

包含ScrollView的类的代码

import UIKit

class ViewController: UIViewController , UIScrollViewDelegate {

    @IBOutlet weak var scrollVieww: UIScrollView!

    var mainRead : Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()
        self.scrollVieww.pagingEnabled = true
        self.scrollVieww.delegate = self

        // Do any additional setup after loading the view, typically from a nib.
        let V1 = self.storyboard?.instantiateViewControllerWithIdentifier("HomeScreen") as UIViewController!
        //Add initialized view to main view and its scroll view and also set bounds
        self.addChildViewController(V1)
        self.scrollVieww.addSubview(V1.view)
        V1.didMoveToParentViewController(self)
        V1.view.frame = scrollVieww.bounds

        //Initialize using Unique ID for the View
        let V2 = self.storyboard?.instantiateViewControllerWithIdentifier("MainScreen") as UIViewController!
        //Add initialized view to main view and its scroll view also set bounds
        self.addChildViewController(V2)
        self.scrollVieww.addSubview(V2.view)
        V2.didMoveToParentViewController(self)
        V2.view.frame = scrollVieww.bounds

        //Create frame for the view and define its urigin point with respect to View 1
        var V2Frame: CGRect = V2.view.frame
        V2Frame.origin.x = self.view.frame.width
        V2.view.frame = V2Frame

        //The width is set here as we are dealing with Horizontal Scroll
        //The Width is x3 as there are 3 sub views in all
        self.scrollVieww.contentSize = CGSizeMake((self.view.frame.width) * 2, (self.view.frame.height))    
    }

    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        if(scrollView.contentOffset.x == self.view.frame.size.width * 1 && !mainRead){
         mainRead = true
         // if i execute this i get a fatal error in the animate method in the class Main_Screen
         let storyboard = UIStoryboard(name: "Main", bundle: nil)
            if let vc = storyboard.instantiateViewControllerWithIdentifier("MainScreen") as? Main_Screen {
                vc.animate()
      }
    }
}

现在是Home_Screen的代码

import UIKit

public class Main_Screen: UIViewController  , UIScrollViewDelegate {

    @IBOutlet weak var aboutMebtn: UIButton!
    @IBOutlet weak var studybtn: UIButton!
    @IBOutlet weak var appsbtn: UIButton!
    @IBOutlet weak var skillsbtn: UIButton!

    var scrollView : UIScrollView!

    @IBOutlet weak var avatarImageView: UIImageView!

    weak var pageControl: UIPageControl!

    var mainRead : Bool = false

    override public func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        // Making the view round
        for v : UIView in self.view.subviews {
            if v.tag != 1 {
                v.layer.cornerRadius = v.frame.size.width/2
                v.layer.masksToBounds = true
            }
        }
    }

     public func animate(){
        // I get a fatal error here
        var buttons : Array<UIButton> = [aboutMebtn , studybtn , appsbtn , skillsbtn]

        avatarImageView.alpha = 0.0
        avatarImageView.transform = CGAffineTransformMakeScale(1.25, 1.25)

        UIView.animateWithDuration(1.0, delay: 1.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.0, options: .CurveEaseIn, animations: { () -> Void in
            self.avatarImageView.alpha = 1.0
            self.avatarImageView.transform = CGAffineTransformMakeScale(0.75, 0.75)
            }, completion: nil)  
}

我无法使用viewWillAppear方法的viewDidAppear,因为这是viewController中的第二个storyboard

1 个答案:

答案 0 :(得分:0)

该行

storyboard.instantiateViewControllerWithIdentifier("MainScreen") as? Main_Screen

正在创建视图控制器的新实例,而不是找到已存在的视图控制器。

如果您需要在兄弟ViewControllers之间进行通信,则需要从其父ViewController设置连接。