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

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

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

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

Q&A

解決済

1回答

1390閲覧

(Swift5)UIPageViewController上でtouches.first.typeを使いたい

tmsah

総合スコア101

Swift

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

0グッド

0クリップ

投稿2019/07/30 14:37

編集2019/11/23 15:21

前提・実現したいこと

Swift5初心者です.ストーリーボードは使っておりません.
UIPageViewControllerを受けたクラスで UIViewクラスの touches.first.typeを使うことはできないのでしょうか.
現在,iPadで使うペイントアプリを開発しているのですが,そこでペンタブレットでタッチした時はキャンバスに線を描画し,指でスワイプをした時は別のキャンバスに移る,という処理を実装したいと考えています.
描画部分では想定通りの動き( touchesBegantouchesMoved)ができていることは確認済みです.

そしてスワイプ部分は現在 UIPageViewControllerで生成したインスタンスに複数の UIViewインスタンス(キャンバス)を乗せる,という実装をしています.
しかしこの UIPageViewController上でペンと指の判別ができないため,ペンで横線を書こうとするとそのままキャンバスの遷移が起こってしまっています(縦線はスワイプイベントが起こらないので描画ができます).

ペンと指を区別するために UIViewクラスの touches.first.typeを使うことを考えたのですが,どう実装すれば UIPageViewController内でこれが使えるのかが分かりませんでした,
この問題を解決するコード例や,機能実現の別のアイディア等を教えていただきたいです.
(例えば, UIViewの方が UIPageViewControllerより先に touchのイベントを受け取る方法など)

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

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

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

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

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

fuzzball

2019/08/05 00:06

SwiftUIは関係ないのでタグを削除して下さい。
guest

回答1

0

ベストアンサー

こんにちは。
手元にペンもなく、できるか判らないのでアイディアだけ。


案1(たぶんできる)

UIPageViewControllerはgestureRecognizersというプロパティを持っていますので、
その中からUIPanGestureRecognizerを探して無効化してしまう。

ページのめくりなどは自分でtouches系イベントで行う。
おそらくページがタッチに吸い付くようなめくり方はこれでは実現できないので、
そもそもUIPageViewControllerを使うメリットがない(トランジションのページカールエフェクトを使った方が手っ取り早い)


案2(検証しないとできるかわからない)

UIPageViewControllerはgestureRecognizersというプロパティを持っていますので、
その中からUIPanGestureRecognizerを探してジェスチャのdelegateをself等に設定して動きをカスタマイズします。

UIGestureRecognizerDelegateの中ではそのタッチイベントをそのジェスチャが処理して良いか?という判定関数がありますので、

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,

shouldReceive touch: UITouch) -> Bool

ペンだったらfalseを返すようにすれば、ペンではめくれなくなるはずです。

#ただ、記憶が曖昧ですが、もとからdelegateにはnil以外の値が入っていたかもしれません。
#そしてそれはUIPageViewControllerインスタンスだったかもしれません。
#もしそうであれば、UIPageViewControllerを継承したクラスを作った方が良いかもしれません。
#(そうしないと普通に動いていた機能が正常に動かなくなるかもしれません)


いろいろやってみてください。

投稿2019/07/31 01:07

takabosoft

総合スコア8356

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

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

tmsah

2019/08/03 06:12

回答ありがとうございます. 色々と試してみて,案1のようにページカールでの実装をしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問