Как получить местоположение UIImageView.Есть много UIImageView - PullRequest
0 голосов
/ 10 октября 2018

Я создаю несколько UIImageView s в коде и хочу переместить и удалить любые UIImageView, которые я выбрал.Прямо сейчас я могу перемещать только последние UIImageView, созданные с помощью UIPanGestureRecognizer.

. Я хочу выбрать возможность перемещения или удаления любых UIImageView, созданных мной (с использованием UIPanGestureRecognizer или UITapGestureRecognizer), а не только последний.


Вот код, который я использовал:

import UIKit

var pointX: CGFloat = 0.0
var pointY: CGFloat = 0.0
var w: CGFloat = 50
var h: CGFloat = 50
var flag: Int = 0

class ViewController: UIViewController {
    @IBOutlet var tapG: UITapGestureRecognizer!
    @IBOutlet weak var ImageView: UIImageView!
    @IBOutlet weak var view_safe: UIView!
    var boxViewArray: Array<UIImageView> = []
    var tap = UITapGestureRecognizer()
    var drag = UIPanGestureRecognizer()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func tapGesture_action(_ sender: UITapGestureRecognizer) {
        let boxImage: UIImage
        let point = sender.location(in: view_safe)

        pointX = point.x
        pointY = point.y

        //四角形のイメージを生成
        boxImage = makeBoxImage(x: pointX-(w/2), y: pointY-(h/2), width: w, height: h)

        var tmp: UIImageView = UIImageView()
        tmp = UIImageView(image: boxImage)
        tmp.tag = flag
        flag += 1

        tap = UITapGestureRecognizer()

        drag = UIPanGestureRecognizer(target: self, action: #selector(self.panView(sender:)))
        tmp.isUserInteractionEnabled = true
        tmp.addGestureRecognizer(drag)

        boxViewArray.append(tmp)

        self.ImageView.addSubview(boxViewArray.last!)
        //self.ImageView.bringSubview(toFront: boxViewArray.last!)
    }

    func makeBoxImage(x: CGFloat, y: CGFloat, width w: CGFloat, height h: CGFloat) -> UIImage{
        print("makeBoxImage 開始")
        //イメージ処理の開始
        let size = CGSize(width: ImageView.frame.width, height: ImageView.frame.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 1.0)
        //コンテキスト
        let context = UIGraphicsGetCurrentContext()
        //サイズを決める
        let drawRect = CGRect(x: x, y: y, width: w, height: h)
        //パスを作る
        let drawPath = UIBezierPath(rect: drawRect)
        //塗り色
        context?.setFillColor(red: 0.0, green: 1.0, blue: 1.0, alpha: 1.0)
        //パスを塗る
        drawPath.fill()
        //線の色
        context?.setStrokeColor(red: 0.0, green: 1.0, blue: 1.0, alpha: 1.0)
        //パスを描く
        drawPath.stroke()
        //イメージコンテキストからUIImageを作る
        let image = UIGraphicsGetImageFromCurrentImageContext()
        //イメージ処理の終了
        UIGraphicsEndImageContext()

        return image!
    }

    @objc func panView(sender: UIPanGestureRecognizer){

        //let tagNo = sender.view?.tag
        //print(tagNo)
        //移動量を取得
        let move: CGPoint = sender.translation(in:self.view)
        //ドラッグした部品の座標に移動量を加算
        sender.view!.center.x += move.x
        sender.view!.center.y += move.y
        //移動量を0に
        sender.setTranslation(CGPoint.zero, in: self.view)
    }

    @objc func delete_tapped(_ sender: UITapGestureRecognizer){
        print("delete")
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print(#function)
        for touch in touches {
            let location = touch.location(in: view_safe)
            print(location)

        }
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
        let location = touch.location(in: view_safe)
        let thePoint: CGPoint = location
        let hitView: UIView = UIView()

        hitView.hitTest(thePoint, with: event)
        //NSLog("Hit Test : tag = %ld", hitView.tag)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()}
}

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Я просто помогу вам с логикой.

Вам нужен список для просмотра изображений.При каждом касании вы будете проверять, какое изображение просматривалось, проверяя каждое местоположение просмотра изображения.* Не проверяйте касание при просмотре изображения, проверяйте касание в контроллере представления.

Если вы хотите переместить объект по панораме, ваш код будет верным, если вы примените это к представлению изображения после того, как узнаете, какое изображение будет перемещено.

надежда поможет вам.

* я создал эту логику раньше, но она немного хитрая

0 голосов
/ 11 октября 2018

Вы можете использовать этот код для удаления ImageView из суперпредставления.

@objc func delete_tapped(_ sender: Any){
    let image = sender as! UIImageView
    image.removeFromSuperview()
    print("delete")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...