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

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

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

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

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

Swift

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

Q&A

解決済

1回答

638閲覧

apple pencilのアプリを作成しようと思っています。サンプルデータがうまく動かないので教えてください。

you555

総合スコア21

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

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

Swift

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

0グッド

1クリップ

投稿2019/02/22 01:16

編集2019/02/22 01:36

いつもお世話になります。iPad Pro用のメモアプリを作成しようと考えています。
Apple pencilのswiftのサンプル。以下のサイトを見つけました。

https://www.raywenderlich.com/1407-apple-pencil-tutorial-getting-started

このサイトのサンプルがswift2でかかれたものでした。
swift4ようにソースを調整してみましたが、実行するとメモリーリークでうまく動作しません。
ViewControllerのviewDidLoadのcanvasView.clearCanvas(animated: false)でメモリリークとなります。

エラー内容 => Thread 1: EXC_BAD_ACCESS (code=257, address=0x1a1b6f04ec9)
よくわからないので、誰かご教授をお願いできなでしょうか。

// ViewCotroller.swift

import UIKit class ViewController: UIViewController { @IBOutlet weak var canvasView: CanvasView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. canvasView.clearCanvas(animated: false) } // Shake to clear screen override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { canvasView.clearCanvas(animated: true) } }

// CanvasView.swift

import Foundation import UIKit let π = CGFloat(Double.pi) class CanvasView: UIImageView { // Parameters private let defaultLineWidth:CGFloat = 6 private var drawColor: UIColor = UIColor.red override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { guard let touch = touches.first else { return } UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0) let context = UIGraphicsGetCurrentContext() // Draw previous image into context image?.draw(in: bounds) drawStroke(context: context, touch: touch) // Update image image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() } private func drawStroke(context: CGContext?, touch: UITouch) { let previousLocation = touch.previousLocation(in:self) let location = touch.location(in:self) // Calculate line width for drawing stroke let lineWidth = lineWidthForDrawing(context: context, touch: touch) // Set color drawColor.setStroke() // Configure line context?.setLineWidth(CGFloat(Double(lineWidth))) context?.setLineCap(.round) // Set up the points context?.move(to: CGPoint(x: previousLocation.x, y: previousLocation.y)) context?.addLine(to: CGPoint(x: location.x, y: location.y)) // Draw the stroke context?.strokePath() } private func lineWidthForDrawing(context: CGContext?, touch: UITouch) -> CGFloat { let lineWidth = defaultLineWidth return lineWidth } func clearCanvas(animated: Bool) { if animated { UIView.animate(withDuration: 0.5, animations: { self.alpha = 0 }, completion: { finished in self.alpha = 1 self.image = nil }) } else { image = nil } } }

イメージ説明

イメージ説明

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

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

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

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

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

fuzzball

2019/02/22 01:18

「メモリーリーク」と判断した根拠は?
you555

2019/02/22 01:24

Thread 1: EXC_BAD_ACCESSを調べて、メモリリークかなと思いました。
fuzzball

2019/02/22 08:51 編集

Consoleにエラーメッセージが表示されていませんか?
you555

2019/02/22 01:36

特にエラーが表示されていませんでした。エラーの内容を画面キャプチャにとって表示しました。
fuzzball

2019/02/22 01:56 編集

Exception Breakpointを追加して、止まる場所を教えて下さい。 ・Breakpoint Navigator(⌘8)で、左下の + を押して「Exception Breakpoint」を選びます。設定などはデフォルトのままでいいです。
fuzzball

2019/02/22 02:32 編集

現在止まっている行の上に、 print(canvasView) を追加して出力を教えて下さい。 (まだでしたらException Breakpointの追加より先にこちらを試して下さい)
takabosoft

2019/02/22 06:01

canvasViewの左の○が空っぽなのでつながっていないのでは・・・
you555

2019/02/25 01:47

アドバイスありがとうございます。
guest

回答1

0

ベストアンサー

妄想しておきます。
StoryboardのUIImageView(canvasView)のCustom ClassCanvasViewを設定して下さい。

投稿2019/02/22 08:50

fuzzball

総合スコア16731

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

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

you555

2019/02/25 01:46

連絡遅くなり、すいません。試してみます。
you555

2019/02/27 00:07

解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問