Итак, я разрабатываю приложение Ipad, которое позволяет пользователю решать головоломку. Я разработал процесс панорамирования для каждой части, но получить их там, где я хочу, не работал должным образом. Я пытаюсь сделать фрагмент в конечном месте, когда он находится в небольшом диапазоне, за которым следует щелчок.Swift - Jigsaw Snap to Place
Вот немного кода для одной части головоломки. Когда моя новая кнопка игры нажата, изображение будет установлено на соответствующее изображение и случайно помещено на холст.
@IBAction func NewGameTapped(sender: UIButton){
let bounds = UIScreen.mainScreen().bounds
let height = bounds.size.height
let width = bounds.size.width
image1.image = UIImage(named:"puzzleImage1.png")
image1.center.x = CGFloat(100 + arc4random_uniform(UInt32(width)-300))
image1.center.y = CGFloat(100 + arc4random_uniform(UInt32(height)-300))
//Create Panning (Dragging) Gesture Recognizer for Image View 1
let panRecognizer1 = UIPanGestureRecognizer(target: self, action: "handlePanning1:")
// Add Panning (Dragging) Gesture Recognizer to Image View 1
image1.addGestureRecognizer(panRecognizer1)
}
Это то место, где у меня возникли проблемы.
func handlePanning1(recognizer: UIPanGestureRecognizer) {
let center = dict1_image_coordinates["puzzleImage1"] as![Int]
let newTranslation: CGPoint = recognizer.translationInView(image1)
recognizer.view?.transform = CGAffineTransformMakeTranslation(lastTranslation1.x + newTranslation.x, lastTranslation1.y + newTranslation.y)
if recognizer.state == UIGestureRecognizerState.Ended {
lastTranslation1.x += newTranslation.x
lastTranslation1.y += newTranslation.y
}
checkPosition(image1, center: center)
}
func checkPosition(image: UIImageView, center: [Int]){
let distance: Double = sqrt(pow((Double(image.center.x) - Double(center[0])),2) + pow((Double(image.center.y) - Double(center[1])),2))
//if the distance is within range, set image to new location.
if distance <= 20{
image.center.x = CGFloat(center[0])
image.center.y = CGFloat(center[1])
AudioServicesPlaySystemSound(clickSoundID)
}
По какой-то причине, паззл только хочет привязать к этому месту, когда часть начинает игру в пределах допустимого расстояния привязки. Я попытался проверить позицию объекта в разных частях моей программы, но до сих пор ничего не работало. Любая помощь или другие советы приветствуются.
Я забыл упомянуть, есть много частей головоломки, которые должны быть перемещены, так что, когда пытались использовать версия self.view, она только зарегистрировала последний признак распознавания жестов. – zhauck
Это прекрасно жаук. Вы можете установить количество одновременных касаний более чем на один. Затем используйте объект распознавателя, чтобы найти вид, чтобы увидеть, какая часть головоломки была затронута –