2017-10-01 14 views
-1

オープンクラスの別のView Controllerで関数を呼び出そうとしています。基本的に私のビューにサブビューが追加されます。私はこれまで関数を呼び出すのに失敗しています。オープンクラスの別のVCから関数を呼び出す - Swift

open class ItemAnnotationView: MKAnnotationView { 

override open func setSelected(_ selected: Bool, animated: Bool) { 
    if selected { 

     UIView.animate(withDuration: 0.1, animations: { 

      print("show large icon") 

      // smaller size 
      self.mediumIconView.transform = CGAffineTransform(scaleX: 0.2, y: 0.2) 
      self.mediumIconView.alpha = 0 

     }, completion: { (animating) in 


      // Start showing large icon 
      self.largeIconView.alpha = 0.2 


      // double size + show large icon 
      UIView.animate(withDuration: 0.2, animations: { 

       // double size 
       self.largeIconView.transform = CGAffineTransform(scaleX: CGFloat(self.ENLARGE_MAX_SCALE), y: CGFloat(self.ENLARGE_MAX_SCALE)) 
       self.largeIconView.frame.origin.y = (1 - self.ENLARGE_MAX_SCALE) * self.MEDIUM_ICON_WIDTH - self.MEDIUM_ICON_WIDTH/2 + 6 
       // completely show large icon 
       self.largeIconView.alpha = 1.0; 

      }, completion: { (animating) in 

       // a little smaller size 
       UIView.animate(withDuration: 0.1, animations: { 

        // a little smaller size 
        self.largeIconView.transform = CGAffineTransform(scaleX: CGFloat(self.ENLARGE_FINAL_SCALE), y: CGFloat(self.ENLARGE_FINAL_SCALE)) 
        self.largeIconView.frame.origin.y = (1 - self.ENLARGE_FINAL_SCALE) * self.MEDIUM_ICON_WIDTH - self.MEDIUM_ICON_WIDTH/2 + 6 
       }, completion: { (animating) in 

       }) 

      }) 

     }) 

    } else { 
     // normal size + hide large icon 
     UIView.animate(withDuration: 0.2, animations: { 

      print("show small icon") 

      // normal size 
      self.largeIconView.transform = CGAffineTransform(scaleX: 1, y: 1) 

      // hide large icon 
      self.largeIconView.alpha = 0.0; 
      self.largeIconView.frame.origin.y = -self.MEDIUM_ICON_WIDTH/2 

     }, completion: { (animating) in 

      // show medium/small icon 
      self.mediumIconView.transform = CGAffineTransform(scaleX: 1, y: 1) 
      self.mediumIconView.alpha = 1 

     }) 

    } 

} 

}「ショー大きいアイコン」を印刷するとき、私は、関数を呼び出す必要が

:ここに私のオープンクラスのコードです。お使いのコントローラで

// Start showing large icon 
      self.largeIconView.alpha = 0.2 
    //call completion 
    self.completionHandler?() 

typealias VoidBlock =() -> Void 
open class ItemAnnotationView: MKAnnotationView { 
    var completionHandler: VoidBlock? 
} 

と完了あなたのアイコンが大きくなり、そのコール:あなたはオープンクラスに完了ブロックを追加することができます

答えて

0

オプション1割り当てられたあなたのオープンクラスは完了を設定します:

//not sure how are you doing this, so the code below is just my thoughts 
let itemAnnotationView = ItemAnnotationView() 
itemAnnotationView.completionHandler = { 
    //do something here when the icon is large 
} 
open class ItemAnnotationView: MKAnnotationView{ 
    var delegate: ItemAnnotationViewDelegate? 
} 

アイコンが大きいときにデリゲートメソッドを呼び出します:

2.第二の方法は、デリゲート

//define the protocol 
protocol ItemAnnotationViewDelegate { 
    func iconDidBecomeLarge() 
} 

を使用することですオプションは、その後、あなたのオープンクラスでデリゲートVARを設定しました

// Start showing large icon self.largeIconView.alpha = 0.2 //call the delegate method self.delegate.iconDidBecomeLarge() 

公開クラスが割り当てられているときに、コントローラからデリゲートを設定する必要があります。

デリゲートを設定
let itemAnnotationView = ItemAnnotationView() 
    itemAnnotationView.delegate = self 

は新しいプロトコルに準拠するように、あなたのコントローラが必要

あなたは拡張機能として、それを設定することができます。

extension YourCointroller: ItemAnnotationViewDelegate { 
    func iconDidBecomeLarge(){ 
     //your icon is large now, do additional stuff 
    } 
} 
関連する問題