Идентификатор идентификатора swift - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть эти строки кода, в которых, если я останавливаюсь на X, чтобы удалить изображение, я удаляю его.Проблема в том, что если у меня есть одно или несколько изображений одного типа, удаляя одно из них, оно также стирает все остальные идентичные.Я думаю, что моя проблема в том, чтобы позвонить «forEach».Что я должен использовать?

Хотя, если изображения отличаются, я удаляю корректно одну "наклейку".

    guard let id = gestureRecognizer.stringIdentifier else {return}
    stickerArray.forEach { (sticker) in
        if id == sticker.stickerIdentifier {
            STKProbes.deleteSticker.send(from: nil, info: sticker.stickerIdentifier)
            sticker.removeFromSuperview()
            sticker.image = nil
            if let index = stickerArray.index(of: sticker) {
                stickerArray.remove(at: index)
            }
        }
    }

func appendSticker(model: CoreSceneViewModel.AddSticker.ViewModel) {
    let sticker = StickerView(frame: PlacementManager.categoryPlacement(forCategory: model.category, over: self.managedView.workbenchView), name: model.name)
    self.managedView.controlsView.alpha = 0
    self.managedView.closeButton.alpha = 0
    self.stickerArray.append(sticker)

    STKProbes.tapSticker.send(from: nil, info: sticker.stickerIdentifier)
    sticker.image = model.sticker
    sticker.contentMode = .scaleAspectFit

    if kFreezeOldStickers {
        for view in self.managedView.workbenchView.subviews {
            if let grs = view.gestureRecognizers {
                for gr in grs {
                    view.removeGestureRecognizer(gr)
                }
            }
        }
    }

    draggingGesture = UIPanGestureRecognizer(target: self, action: #selector(dragging(gestureRecognizer:)))
    sticker.addGestureRecognizer(draggingGesture)

    pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(pinched(gestureRecognizer:)))
    sticker.addGestureRecognizer(pinchGesture)

    rotationGesture = UIRotationGestureRecognizer(target: self, action: #selector(rotated(gestureRecognizer:)))
    sticker.addGestureRecognizer(rotationGesture)

    tapGestureAlpha = UITapGestureRecognizer(target: self, action: #selector(setAlpha0(gestureRecognizer:)))
    self.managedView.workbenchView.addGestureRecognizer(tapGestureAlpha)

    tapGesture = TapGesture(target: self, action: #selector(tapped(gestureRecognizer:)))
    tapGesture.idIdentifier = sticker.stickerIdentifier
    sticker.addGestureRecognizer(tapGesture)

    dTapGesture = DeleteTapGesture(target: self, action: #selector(cancelTapped(gestureRecognizer:)))
    dTapGesture.stringIdentifier = sticker.stickerIdentifier
    sticker.xButton.addGestureRecognizer(dTapGesture)
    sticker.xButton.isUserInteractionEnabled = true
    sticker.isUserInteractionEnabled = true
    sticker.layer.zPosition = 0
    draggingGesture.delegate = self

    self.managedView.workbenchView.addSubview(sticker)

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете попробовать

stickerArray.forEach {
    if $0.xButton == gestureRecognizer.view {
        $0.removeFromSuperview()

    } 
}

У вас может быть подобное stringIdentifier для предметов

...