2017-08-29 14 views
1

フレームが変更された場合に気付かれる必要があるNSViewがあります。NSViewフレームの変更を観察するには?

しかし、私は、スーパービューフレームのサイズが変更された場合にのみ、この「通知」を取得します。私はNSViewのクラス内このような何かを行う場合は

は:

NotificationCenter.default.addObserver(forName: Notification.Name(rawValue: "changeOwnSize"), object: nil, queue: nil) { notification in 

      let newSize = NSSize(width: self.frame.width/2, height: self.frame.height) 
      self.setFrameSize(newSize) 
} 

didSet機能doesn'tは全く反応します。フレームサイズは変更されますが。アドバイスありがとう。

+0

の可能性のある重複した[UIViewのは、イベントのサイズを変更ありますか?](https://stackoverflow.com/questions/4000664/is-there-a-uiview-resize-event) – GIJOW

+0

は 'bounds'を試してみてください。.. – sCha

+0

@sChaそれは 'bounds'と同じです –

答えて

3

2つのステップ:いくつかの時点で

  1. trueにあなたのビューのpostsFrameChangedNotificationsプロパティを設定します。

  2. frameDidChangeNotificationNSNotificationCenter(Swift 3を使用している場合はNSNotification.Name.NSViewFrameDidChangeなど)を使用していることを確認できます。

+0

これはiOSの' UIView'sで動作しますか?ドキュメントでは、Mac OSのNSViewでサポートされていることのみを示しています。 –

+0

私はドキュメント内の通知への参照が表示されないので、おそらくそうは思わないでしょう。直感的に見て、iOSのUIViewは、プログラムコードが背後にあることなく、フレームが変更される可能性は非常に低くなります。 –

+0

iOSはKVOや通知のようなものに頼っているようです。なぜなら、彼らはむしろ「ヘビー級」であり、メモリとCPUの両方の馬力が必要だからです。私の推測では、アップルはiOSビューを実装しているときにその機能を削除することにしたということです。 –

関連する問題