NSView का आकार बदलने पर पता लगाने का सही तरीका क्या है? मुझे दृश्य या दृश्य के लिए किसी प्रतिनिधि पर उपलब्ध कोई भी आकार बदलने वाला कार्यक्रम नहीं दिख रहा है।
मैंने इस हैक को जोड़ा है, जहां मैं आकार में परिवर्तन का पता लगाने के लिए drawRect का उपयोग करता हूं, लेकिन मुझे यकीन है कि ऐसा करने का एक और सही तरीका होना चाहिए।
CGRect m_resizeRect = CGRect.Empty;
public override void DrawRect(CGRect dirtyRect)
{
base.DrawRect(dirtyRect);
if (this.InLiveResize) {
if (m_resizeRect.Size != this.Bounds.Size) {
m_resizeRect = this.Bounds;
this.OnResize();
}
}
}
public override void ViewWillStartLiveResize()
{
m_resizeRect = this.Bounds;
base.ViewWillStartLiveResize();
}
public override void ViewDidEndLiveResize()
{
m_resizeRect = CGRect.Empty;
base.ViewDidEndLiveResize();
}
protected void OnResize() {
Console.WriteLine("OnResize " + this.Bounds.ToString() );
}
4 जवाब
आप आकार बदलने की सूचनाओं की सदस्यता ले सकते हैं।
पर्यवेक्षक को डिफ़ॉल्ट सूचना केंद्र में जोड़ें:
NSObject NSWindowDidResizeNotificationObject;
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
NSWindowDidResizeNotificationObject = NSNotificationCenter.DefaultCenter.AddObserver (new NSString ("NSWindowDidResizeNotification"), ResizeObserver, null);
}
एनएसएनोटिफिकेशन क्रिया:
public void ResizeObserver (NSNotification notify)
{
var r = this.View.Frame;
Console.WriteLine ("{0}:{1}:{1}", notify.Name, r.Height, r.Width);
}
पर्यवेक्षक निकालें (और स्मृति जारी करें):
NSNotificationCenter.DefaultCenter.RemoveObserver (NSWindowDidResizeNotificationObject);
नमूना आउटपुट:
NSWindowDidResizeNotification:740:740
NSWindowDidResizeNotification:715:715
NSWindowDidResizeNotification:681:681
NSWindowDidResizeNotification:642:642
आप सेटफ्रेमसाइज विधि को ओवरराइड कर सकते हैं और हर बार फ्रेम अपडेट होने पर अपना सामान खुद कर सकते हैं।
class MyView: NSView {
...
override func setFrameSize(newSize: NSSize) {
super.setFrameSize(newSize)
Swift.print("new size is \(frame)")
}
...
}
स्वीकृत उत्तर केवल खिड़की के आकार में बदलाव का जवाब देता है, उदा। जब स्प्लिटव्यू का स्प्लिट-बार आकार बदलने का कारण बनता है।
NSView देखें postsBoundsChangedNotifications
और postFrameChangedNotifications
प्रॉपर्टीज। आप उन्हें सेट कर सकते हैं और उन सूचनाओं के लिए पंजीकरण कर सकते हैं।
आप NSViewController.viewDidLayout() ओवरराइड विधि का उपयोग कर सकते हैं:
class MyViewController: NSViewController {
...
override func viewDidLayout() {
Swift.print("view has been resize to \(self.view.frame)")
}
...
}
संबंधित सवाल
नए सवाल
cocoa
कोको मैकॉश के लिए ऐप्पल का एप्लिकेशन-डेवलपमेंट फ्रेमवर्क है, जिसमें फाउंडेशन, एप्लीकेशन किट और कोर डेटा शामिल हैं। IOS प्रश्नों के लिए "कोको-टच" टैग का उपयोग करें।