コードでオートレイアウトの設定をするサンプルアプリケーション

Xamarin.MACで、コードでオートレイアウトの設定をするサンプルアプリケーションです。

オートレイアウトを解除します。

greenView.TranslatesAutoresizingMaskIntoConstraints = false;

制約を設定するViewとViewの名前を設定します。
ここでは、blueViewに対して、”blueView”という名前をつけています。

var viewsDictionary = NSDictionary.FromObjectsAndKeys(
    new NSObject[] { blueView },
    new NSObject[] { new NSString("blueView") }
);

変数名と変数の値を設定します。
ここでは、leftPaddingの値を0、rightPaddingの値を30にしています。

var metricsDic = NSDictionary.FromObjectsAndKeys(
    new NSObject[] { new NSNumber(0), new NSNumber(30), },
    new NSObject[] { new NSString("leftPadding"), new NSString("rightPadding") }
);

制約を追加します。

mainView.AddConstraints(NSLayoutConstraint.FromVisualFormat(
    "H:|-leftPadding-[blueView]-rightPadding-|", 0, metricsDic, viewsDictionary));

blueViewはviewsDictionaryで設定したViewの名前、
leftPaddingとrightPaddingはmetricsDicで設定した変数名です。

Xamarin.MacでNSScrollViewのコンテンツを中央に表示するサンプルアプリケーション

NSScrollViewのコンテンツを中央に表示するサンプルアプリケーションです。

ソースコードはこちら。

下記のプロジェクトをXamarin.Macに移植しました。

NSClipViewのConstrainBoundsRect()でClipViewの範囲を制限することで、DocumentViewを中央に描画します。

public partial class MyClipView : AppKit.NSClipView
{
    public override CoreGraphics.CGRect ConstrainBoundsRect(CoreGraphics.CGRect proposedBounds)
    {
        var documentBounds = this.DocumentView.Bounds;
        var delta = new CGPoint(
            documentBounds.Width - proposedBounds.Width,
            documentBounds.Height - proposedBounds.Height);
        var x = (delta.X < 0) ? (delta.X / 2) : Math.Max(0, Math.Min(proposedBounds.X, delta.X));
        var y = (delta.Y < 0) ? (delta.Y / 2) : Math.Max(0, Math.Min(proposedBounds.Y, delta.Y));
        proposedBounds.X = (System.nfloat)x;
        proposedBounds.Y = (System.nfloat)y;
        return proposedBounds;
    }
}

Xamarin.MacでNSBezierPathのBoundsとControlPointBoundsを描画するサンプルアプリケーション

NSBezierPathのBoundsとControlPointBoundsの違いを確認するため、四角形とベジェ曲線のoundsとControlPointBoundsを描画しました。

ソースコードはこちら。

BoundsとControlPointBoundsは、ベジェ曲線の制御点の扱いが異なっています。

四角形

ベジェ曲線

Xamarin.MacでNSViewのDrawRect()を使ってベジェ曲線を描画するサンプル

Xamarin.MacでNSViewのDrawRect()を使ってベジェ曲線を描画するサンプルです。

ソースコードはこちら

作り方

  1. Visual Studio for Macのメニューの「ファイル」→「新しいファイル」→「Mac」→「ビュー」を選択、名前を「SampleView」にして「新規」ボタンを押して作成する。

  2. 作成した「SampleView.cs」を開き、以下のコードを追加する。

    public override void DrawRect(CoreGraphics.CGRect dirtyRect)
    {
        var rect = this.Bounds;
        var x1 = rect.Left;
        var y1 = rect.Top;
        var x2 = rect.Right;
        var y2 = rect.Bottom;
    
        NSBezierPath path = new NSBezierPath();
        path.MoveTo(new CoreGraphics.CGPoint(x1, y1));
        path.CurveTo(new CoreGraphics.CGPoint(x2, y1),
                     new CoreGraphics.CGPoint(x1, y2),
                     new CoreGraphics.CGPoint(x2, y2));
        path.LineWidth = 5;
        NSColor.Red.SetStroke();
        path.Stroke();
    }
    
  3. storyboardファイルをダブクリックして、Xcodeで開く。

  4. ViewControllerのViewを選択して、Classを「SampleView」にする。

以上。