2017-02-02 5 views
1

ボタンの外にドラッグすると、UIButtonのデフォルトによってハイライト状態がすぐに取り消されないことを誰もが知っています。 70ピクセル離れた場所でUIControlEventTouchDragExitがトリガーされます。私が想定しcontinueTrackingWithTouchがUIButtonからサブクラス化するときに機能しない

import UIKit 

class UINewButton: UIButton { 
    override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool { 
     print("here") 
     let touchOutside = !CGRectContainsPoint(self.bounds, touch.locationInView(self)) 
     if touchOutside { 
      let previousTochInside = CGRectContainsPoint(self.bounds, touch.previousLocationInView(self)) 
      if previousTochInside { 
       print("Sending UIControlEventTouchDragExit") 
       self.sendActionsForControlEvents(.TouchDragExit) 
       self.highlighted = false 
       self.selected = false 
      }else{ 
       print("Sending UIControlEventTouchDragOutside") 
       self.sendActionsForControlEvents(.TouchDragOutside) 
      } 
     }else{ 
      let previousTouchOutside = !CGRectContainsPoint(self.bounds, touch.previousLocationInView(self)) 
      if previousTouchOutside{ 
       print("Sending UIControlEventTouchDragEnter") 
       self.sendActionsForControlEvents(.TouchDragEnter) 
      }else{ 
       print("Sending UIControlEventTouchDragInside") 
       self.sendActionsForControlEvents(.TouchUpInside) 
      } 
     } 
     return super.continueTrackingWithTouch(touch, withEvent: event) 
    } 
} 

とのUIViewController

@IBOutlet var confirmButton: UINewButton! 

に、このようなボタンを作成します。私は、その距離は0になりたいので、それの解決策を検索した後、私はこのようなサブクラスを作成してみましたUIButtonがタッチされてドラッグされたとき。これは、この順序で関数を呼び出します。

beginTrackingWithTouch(タッチ) - > continueTrackingWithTouch(ドラッグ) - > endTrackingWithTouch(左)

しかし、ここでは奇妙な部分です。関数continueTrackingWithTouchをオーバーライドしても、まだ呼び出されていません。私がそこに置いたところにコンソールウィンドウが "ここに"表示されなかったからです。結果はデフォルトの距離70のままです。どうしてそんなことができますか?

上記の3つの関数を呼び出して、必要な場合はtrueを返します。 私は何を欠席しましたか?この記事を読んだ後

UIControlEventTouchDragExit triggers when 100 pixels away from UIButton はまだ:(助けない(プラスそれはObjective-Cで書かれた...)

ので、私はちょうど変更できる機能のプロパティ70ピクセルの距離ではないですか? (どうやって元の機能を見ることができますか?Apple Developer Documentationには詳細はありません) UIViewControllerでbutton.addtargetを使用する必要がありますか?

ここにあります別の質問です: ボタンの外にドラッグしたときにハイライト状態をキャンセルしたい場合は、この権利ですか?

self.highlighted = false 
self.selected = false 

どちらが正しいかわかりませんので、私はそれをすべて使用しました。

助けてください!迅速な初心者ですが、私は3日間この問題に悩まされています。 QQ

答えて

0

Swift 3では、関数の署名が変更されました。それは今です:

func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool

API Reference

+0

ああ!しかし、私はまだswift2.3でxcode7を使用しています。だから私はそれが問題だとは思わない。まだありがとう! – kidnapper

関連する問題