[解決済み] ビューコントローラからプログラム的に線を引くには?
質問
私は
UIViewController
. プログラムで作成されたビューに線を引くにはどうしたらよいでしょうか?
どのように解決するのですか?
一般的な方法は2つあります。
-
使用方法
CAShapeLayer
:-
を作成します。
UIBezierPath
(を作成します(座標は好きなものに置き換えてください)。UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(10.0, 10.0)]; [path addLineToPoint:CGPointMake(100.0, 100.0)];
-
を作成します。
CAShapeLayer
を作成し、そのUIBezierPath
:CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = [path CGPath]; shapeLayer.strokeColor = [[UIColor blueColor] CGColor]; shapeLayer.lineWidth = 3.0; shapeLayer.fillColor = [[UIColor clearColor] CGColor];
-
追加する
CAShapeLayer
をビューのレイヤーに追加します。[self.view.layer addSublayer:shapeLayer];
Xcode の以前のバージョンでは、手動で QuartzCore.framework をプロジェクトの "Link Binary with Libraries" に追加してください。 をインポートし
<QuartzCore/QuartzCore.h>
ヘッダーをインポートする必要がありますが、これはもう必要ありません ("Enable Modules" と "Link Frameworks Automatically" ビルド設定をオンにしている場合)。 -
-
もう一つの方法は、サブクラス
UIView
をサブクラス化し コアグラフィックス の呼び出しをdrawRect
メソッドを呼び出します。-
を作成します。
UIView
サブクラスを作成しdrawRect
を定義し、線を引く。Core Graphicsでできます。
- (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]); CGContextSetLineWidth(context, 3.0); CGContextMoveToPoint(context, 10.0, 10.0); CGContextAddLineToPoint(context, 100.0, 100.0); CGContextDrawPath(context, kCGPathStroke); }
あるいは
UIKit
:- (void)drawRect:(CGRect)rect { UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(10.0, 10.0)]; [path addLineToPoint:CGPointMake(100.0, 100.0)]; path.lineWidth = 3; [[UIColor blueColor] setStroke]; [path stroke]; }
-
次に、このビュークラスを NIB/ストーリーボードやビューのベースクラスとして使用するか、ビューコントローラにサブビューとしてプログラム的に追加させることができます。
PathView *pathView = [[PathView alloc] initWithFrame:self.view.bounds]; pathView.backgroundColor = [UIColor clearColor]; [self.view addSubview: pathView];
-
上記の2つのアプローチのSwiftでの表現は以下の通りです。
-
CAShapeLayer
:// create path let path = UIBezierPath() path.move(to: CGPoint(x: 10, y: 10)) path.addLine(to: CGPoint(x: 100, y: 100)) // Create a `CAShapeLayer` that uses that `UIBezierPath`: let shapeLayer = CAShapeLayer() shapeLayer.path = path.cgPath shapeLayer.strokeColor = UIColor.blue.cgColor shapeLayer.fillColor = UIColor.clear.cgColor shapeLayer.lineWidth = 3 // Add that `CAShapeLayer` to your view's layer: view.layer.addSublayer(shapeLayer)
-
UIView
のサブクラスです。class PathView: UIView { var path: UIBezierPath? { didSet { setNeedsDisplay() } } var pathColor: UIColor = .blue { didSet { setNeedsDisplay() } } override func draw(_ rect: CGRect) { // stroke the path pathColor.setStroke() path?.stroke() } }
そして、それをビューの階層に追加します。
let pathView = PathView() pathView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(pathView) NSLayoutConstraint.activate([ pathView.leadingAnchor.constraint(equalTo: view.leadingAnchor), pathView.trailingAnchor.constraint(equalTo: view.trailingAnchor), pathView.topAnchor.constraint(equalTo: view.topAnchor), pathView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) pathView.backgroundColor = .clear let path = UIBezierPath() path.move(to: CGPoint(x: 10, y: 10)) path.addLine(to: CGPoint(x: 100, y: 100)) path.lineWidth = 3 pathView.path = path
上では
PathView
を追加していますが、IB で追加することもできます。path
を設定するだけです。
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み] 基本的なUIButtonをプログラムで作成するには?
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] UITextViewのサイズをコンテンツに合わせるには?
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み】UIButtonに複数行のテキストを追加する方法は?
-
[解決済み】iOSで最上位のビューコントローラーを見つける方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
クラッシュエラー libc++abi.dylib: NSException 型のキャッチできない例外で終了_allanGold のブログ - ProgrammerITS401
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] 文字列の長さを取得する
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み] UITableView - トップにスクロールする