質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2570閲覧

【xcode】座標値の少数点数

MakeAGrape

総合スコア18

Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/01/27 11:12

OSXアプリをSwiftで作成しております。
※Swift3,Xcode8.1

NSViewの中央にNSTextFieldを配置する際、x座標、y座標に小数点数(サンプル2,サンプル4)を設定した場合、NStextFieldの位置が中央からズレてしまいます。

x軸、y軸には整数しか設定できないのでしょうか。
ご教示お願い致します。

イメージ説明

import Cocoa class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() // サンプル1 let sampleView1 = NSView(frame: NSRect(x: 155, y: 124, width: 20, height: 25)) sampleView1.wantsLayer = true sampleView1.layer? = CALayer() sampleView1.layer?.backgroundColor = NSColor.blue.cgColor let sampleTextField1 = NSTextField(frame: NSRect(x: 1, y: 1, width: 18, height: 23)) sampleTextField1.drawsBackground = true sampleTextField1.backgroundColor = NSColor.white sampleTextField1.isEditable = false sampleTextField1.isBordered = false sampleView1.addSubview(sampleTextField1) // サンプル2 let sampleView2 = NSView(frame: NSRect(x: 185, y: 124, width: 20, height: 25)) sampleView2.wantsLayer = true sampleView2.layer? = CALayer() sampleView2.layer?.backgroundColor = NSColor.blue.cgColor let sampleTextField2 = NSTextField(frame: NSRect(x: 1.5, y: 1.5, width: 17, height: 22)) sampleTextField2.drawsBackground = true sampleTextField2.backgroundColor = NSColor.white sampleTextField2.isEditable = false sampleTextField2.isBordered = false sampleView2.addSubview(sampleTextField2) // サンプル3 let sampleView3 = NSView(frame: NSRect(x: 215, y: 124, width: 20, height: 25)) sampleView3.wantsLayer = true sampleView3.layer? = CALayer() sampleView3.layer?.backgroundColor = NSColor.blue.cgColor let sampleTextField3 = NSTextField(frame: NSRect(x: 2, y: 2, width: 16, height: 21)) sampleTextField3.drawsBackground = true sampleTextField3.backgroundColor = NSColor.white sampleTextField3.isEditable = false sampleTextField3.isBordered = false sampleView3.addSubview(sampleTextField3) // サンプル4 let sampleView4 = NSView(frame: NSRect(x: 245, y: 124, width: 20, height: 25)) sampleView4.wantsLayer = true sampleView4.layer? = CALayer() sampleView4.layer?.backgroundColor = NSColor.blue.cgColor let sampleTextField4 = NSTextField(frame: NSRect(x: 2.5, y: 2.5, width: 15, height: 20)) sampleTextField4.drawsBackground = true sampleTextField4.backgroundColor = NSColor.white sampleTextField4.isEditable = false sampleTextField4.isBordered = false sampleView4.addSubview(sampleTextField4) self.view.addSubview(sampleView1) self.view.addSubview(sampleView2) self.view.addSubview(sampleView3) self.view.addSubview(sampleView4) } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ドキュメントに書かれているかは未確認ですが、今までの経験ではビューの座標や、NSBezierPathなどで描画するときの座標は整数にしないと、線の太さが正しくないという症状が出たり、存在しない境界線が表示されたり、NSImageViewの場合やNSImageの描画処理などで、画像がぼやける現象が起きます。

私の場合は、座標の計算中は小数点を含むまま使用し、最後のビューにセットする瞬間や描画する瞬間に切り捨て、または、四捨五入をするようにしています。

swift

1var frame = ... 2 3// 何か座標の計算処理 4 5let sampleTextField4 = NSTextField(frame: NSRect( 6 x: floor(frame.origin.x), 7 y: floor(frame.origin.y), 8 width: floor(frame.width), 9 height: floor(frame.height) 10))

投稿2017/02/16 00:13

studiork

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MakeAGrape

2017/02/20 12:30

ご確認ありがとうございます。 切り捨てで対応しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問