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

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

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

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

3651閲覧

swift スワイプ 座標判定 XY

dynamite_nakaji

総合スコア42

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/04/21 09:00

編集2016/04/21 12:05

###前提・実現したいこと
毎度毎度すみません・・・
現在swiftで作っていて、場所Aにオブジェクトをスワイプし
オブジェクトが場所Aに少しでも入っていたら、
オブジェクトを消す・・・と言うものを作っています。

しかし、オブジェクトをスワイプし場所Aにおいても
オブジェクトの左上から左下、左上から右上までの辺しか反応しません。

コードは
func buttonPressed(sender: UIButton) {
if !plan1_hozon.isMoveing {
view.addSubview(configuration)}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touchEvent = touches.first!
let tag = touchEvent.view?.tag
if tag == 999 {moveView(touchEvent, vi: オブジェクト)}
}
func moveView<T: UIView>(touchEvent: UITouch, vi: T) {
// ドラッグ前の座標
let preDx = touchEvent.previousLocationInView(self.view).x
let preDy = touchEvent.previousLocationInView(self.view).y

// ドラッグ後の座標 let newDx = touchEvent.locationInView(self.view).x let newDy = touchEvent.locationInView(self.view).y let dx = newDx - preDx // ドラッグしたx座標の移動距離 let dy = newDy - preDy // ドラッグしたy座標の移動距離 var viewFrame: CGRect = vi.frame // 画像のフレーム // 移動分を反映させる viewFrame.origin.x += dx viewFrame.origin.y += dy vi.frame = viewFrame } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if (オブジェクト.frame.minX >= 30 && オブジェクト.frame.minX <= 165) or (オブジェクト.frame.minY <= 540 && オブジェクト.frame.minY >= 730){ オブジェクト.removeFromSuperview()} }

###試したこと
よくわからないので
frameをcenterを変えてみたりしましたが、よくわかりません。
わかる方どうかよろしくお願い致します!

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

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

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

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

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

guest

回答2

0

ベストアンサー

前回載せたコードが汎用性がなかったため書き直しました。
以下のコードで消したい場所のCGRectを指定するとドラッグを離した時、その場所だったらオブジェクトが消えます。

View同士が重なっているかどうかを判定する等は以下のサイトが参考になります。
CGGeometryクラスの位置やサイズ操作系の関数紹介

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 let button1 = CustomButton(type: .Custom) 6 let button2 = CustomButton(type: .Custom) 7 8 let removeZoneView = UIView(frame: CGRectMake(0, 0, 200, 200)) 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 removeZoneView.backgroundColor = UIColor.redColor() 14 view.addSubview(removeZoneView) 15 16 // ボタン1を生成 17 button1.frame = CGRectMake(100, 300, 200, 50) 18 button1.setTitle("Button1", forState: .Normal) 19 button1.setTitleColor(UIColor.blueColor(), forState: .Normal) 20 button1.backgroundColor = UIColor.yellowColor() 21 button1.addTarget(self, action: #selector(ViewController.buttonPressed(_:)), forControlEvents: .TouchUpInside) 22 button1.userInteractionEnabled = true 23 button1.tag = 1 24 // 消したい場所(frame)を設定 25 button1.removeRect = removeZoneView.frame 26 view.addSubview(button1) 27 28 // ボタン2を生成 29 button2.frame = CGRectMake(100, 400, 200, 50) 30 button2.setTitle("Button2", forState: .Normal) 31 button2.setTitleColor(UIColor.blueColor(), forState: .Normal) 32 button2.backgroundColor = UIColor.greenColor() 33 button2.addTarget(self, action: #selector(ViewController.buttonPressed(_:)), forControlEvents: .TouchUpInside) 34 button2.userInteractionEnabled = true 35 button2.tag = 2 36 button2.removeRect = removeZoneView.frame 37 view.addSubview(button2) 38 } 39 40 func buttonPressed(sender: UIButton) { 41 if !button1.isMoveing && sender.tag == 1 { 42 // ボタン1押下時のイベント 43 print("Push! Button1") 44 } 45 46 if !button2.isMoveing && sender.tag == 2 { 47 // ボタン2押下時のイベント 48 print("Push! Button2") 49 } 50 } 51} 52 53 54// CustomButton Class 55class CustomButton: UIButton { 56 57 var isMoveing : Bool = false 58 var removeRect: CGRect! 59 var position : CGPoint! 60 61 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 62 super.touchesBegan(touches, withEvent: event) 63 position = self.frame.origin 64 } 65 66 override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 67 super.touchesMoved(touches, withEvent: event) 68 69 isMoveing = true 70 71 let touchEvent = touches.first! 72 73 // ドラッグ前の座標 74 let preDx = touchEvent.previousLocationInView(superview).x 75 let preDy = touchEvent.previousLocationInView(superview).y 76 77 // ドラッグ後の座標 78 let newDx = touchEvent.locationInView(superview).x 79 let newDy = touchEvent.locationInView(superview).y 80 81 // ドラッグしたx座標の移動距離 82 let dx = newDx - preDx 83 84 // ドラッグしたy座標の移動距離 85 let dy = newDy - preDy 86 87 // 画像のフレーム 88 var viewFrame: CGRect = self.frame 89 90 // 移動分を反映させる 91 viewFrame.origin.x += dx 92 viewFrame.origin.y += dy 93 self.frame = viewFrame 94 } 95 96 override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 97 super.touchesEnded(touches, withEvent: event) 98 99 if let rect = removeRect where CGRectIntersectsRect(self.frame, rect) { 100 // 消したいFrameと重なっている場合 101 self.removeFromSuperview() 102 } 103 104 isMoveing = false 105 if position == self.frame.origin { 106 self.sendActionsForControlEvents(.TouchUpInside) 107 } 108 } 109}

サンプルはボタンが2つ表示されますが、赤いViewの上に少しでも重なったらボタンが消えます。
image

投稿2016/04/21 16:36

_Kentarou

総合スコア8490

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

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

dynamite_nakaji

2016/04/22 07:27

とてもわかりやすく説明していただきありがとうございました!!
guest

0

それは、frameのminXとminYしか評価していないからです。
maxXやmaxYも評価する必要があります。

投稿2016/04/21 13:14

Stripe

総合スコア2183

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

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

dynamite_nakaji

2016/04/22 07:25

そうですね〜 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問