cocoa - 如何在 Xamarin.Mac 中检测 NSView 的调整大小?

标签 cocoa xamarin.mac

检测 NSView 大小何时调整的正确方法是什么? 我没有看到 View 上有任何可用的调整大小事件或 View 的任何委托(delegate)。

我添加了这个技巧,我使用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() );
    }

最佳答案

您可以订阅调整大小通知。

将观察者添加到默认通知中心:

NSObject NSWindowDidResizeNotificationObject;
public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    NSWindowDidResizeNotificationObject = NSNotificationCenter.DefaultCenter.AddObserver (new NSString ("NSWindowDidResizeNotification"), ResizeObserver, null);
}

NSNotification 操作:

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

关于cocoa - 如何在 Xamarin.Mac 中检测 NSView 的调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098131/

相关文章:

cocoa - NSMenuItem 启用状态、动态命名和目标操作

objective-c - NSSplitView 修复了窗口调整大小时的分割器?

c# - 在 Xamarin MAC 应用程序中检测 Wifi SSID

cocoa - NSBezierPath 描边颜色错误

cocoa - 为什么我的新 subview 叠加在我的分割 View 中?

cocoa - MonoMac 中的 NSReadPixel 在哪里?

objective-c - 以编程方式更改 NSProgressIndicator 的高度

iPhone内存管理(属性(property)专用)

cocoa - Core Animation - 模拟Windows 7的窗口关闭效果?

ssl - 在 Mono 上验证 x509 证书(OS X 可信根)