좋아요, 나는 How to trigger tap gesture recognizer of UIView programmatically 및 비슷한 질문을 보았지만 찾고있는 것을 찾을 수 없습니다. iMessage 앱 확장 프로그램을 구축 중이며 너무 프로그래밍 방식으로 MSSticker에서 탭 이벤트를 트리거해야합니다.트리거를 사용하여 MSSticker를 탭하거나 프로그래밍 방식으로 볼 수 있습니까?
사용자 지정 MSStickerViews는 다음 클래스를 사용하여 눌렀을 때 또는 누른 다음 다른 기능을 트리거하는 것을 감지하지만 실제로이 탭을 시뮬레이트하는 방법을 모르기 때문에 스티커가 입력 필드 :
protocol InstrumentedStickerViewDelegate: class {
func stickerViewDidSelect(stickerView: MSStickerView)
func stickerViewDidPeel(stickerView: MSStickerView)
}
class InstrumentedStickerView: MSStickerView {
weak var delegate: InstrumentedStickerViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
for gestureRecognizer in gestureRecognizers ?? [] {
if let tapGestureRecognizer = gestureRecognizer as? UITapGestureRecognizer {
tapGestureRecognizer.addTarget(self, action: #selector(didTap))
} else if let longPressGestureRecognizer = gestureRecognizer as? UILongPressGestureRecognizer {
longPressGestureRecognizer.addTarget(self, action: #selector(didLongPress))
}
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func didTap(tapGestureRecognizer: UITapGestureRecognizer) {
if tapGestureRecognizer.state == .recognized {
delegate?.stickerViewDidSelect(stickerView: self)
}
}
func didLongPress(longPressGestureRecognizer: UILongPressGestureRecognizer) {
if longPressGestureRecognizer.state == .began {
delegate?.stickerViewDidPeel(stickerView: self)
}
}
}
그냥 탭 어떤 특정 기능을 실행할 필요가 없습니다되어 작동하지 않습니다 위의 탭 기능 중 하나를 호출하는 이유 - 난 그냥에 가짜 탭을 작성해야 MSStickerView 내에서 MSSticker를 사용하면 입력 필드에 입력됩니다. 나는 이것을 어떻게하는지 모른다.
내가 (필자 시도)이 같은 내 MSStickerViews을 생성하고 수집보기에 넣어하지만, 프로그래밍 콜렉션 뷰 셀을 도청하는 것은 아무것도하지 않는다 :
var url: URL?
var i = 1
while i < 5 { //while true
url = Bundle.main.url(forResource: "test5", withExtension: "png") //would be "test\(i)"
print("URL IS THIS: \(url)")
guard let url = url else { break }
//make it a sticker
let sticker = try! MSSticker(contentsOfFileURL: url, localizedDescription: "test\(i)")
//let stickerView = InstrumentedStickerView(frame: CGRect(x: 0, y: 0, width: view.bounds.width*0.4, height: view.bounds.width*0.4))
let stickerView = InstrumentedStickerView(frame: CGRect(origin: CGPoint(x: 0,y :0), size: stickerSize))
stickerView.sticker = sticker
stickerView.delegate = self
starterPack.append(stickerView)
i += 1
어쩌면 같은 것을 느낌이 (의사 코드)
starterPack[1].sendActionForEvent(UIEvent.Tap)
은 올바르지 만 MSStickerView는 .sendActionForEvent
나는 필사적가 없습니다. 가짜 탭을 만들려면 어떻게해야합니까?
나는 또한이 문제에 근무하지만 대신 stickerview의 이미지 뷰를 사용하여이 기능을 달성하고 당신이 당신의 collectionview 세포 위임 방법 didselect에서 원하는 작업을 수행 할 경우 솔루션을하지 않았다 . –