Je n'ai pas été en mesure de trouver un moyen d'activer avec précision le défilement horizontal et vertical par programmation avec Swift (mes objets sont programmatiques, ce qui rend l'utilisation de la mise en page automatique dans IB impossible).
Le tutoriel que j'ai suivi permet de faire défiler les deux sens comme prévu. Le problème est que mon bouton reste au même endroit occupant une partie de l'écran, peu importe où vous faites défiler. J'ai eu ce même résultat avec un autre tutoriel et je suis assez confus quant à la raison pour laquelle cela se produit.
Je n'ai pas pu trouver de réponse à cela, donc je suppose que d'autres trouveront cela bénéfique.
Voici le code que j'ai. J'ai fait un projet très basique basé sur ce tutoriel: http://koreyhinton.com/blog/uiscrollview-crud.html
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
var scrollView: UIScrollView!
var containerView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
let buttonOne = UIButton.buttonWithType(UIButtonType.System) as UIButton
buttonOne.frame = CGRectMake(10, 50, 50, 50)
buttonOne.backgroundColor = UIColor.greenColor()
buttonOne.setTitle("test", forState: UIControlState.Normal)
buttonOne.addTarget(self, action: "buttonAction1x1:", forControlEvents: UIControlEvents.TouchUpInside)
self.scrollView = UIScrollView()
self.scrollView.delegate = self
self.scrollView.contentSize = CGSizeMake(1000, 1000)
containerView = UIView()
scrollView.addSubview(containerView)
view.addSubview(scrollView)
self.view.addSubview(buttonOne)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
containerView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Votre code fonctionne parfaitement, mais il y a un petit problème dans l'ajout de buttonOne sur la vue.
Vous avez ajouté buttonOne sur self.view (c'est-à-dire sous-vue de self.view), pas containerView qui est sur scrollView.
Vous devez utiliser le code suivant
containerView.addSubview(buttonOne)
au lieu de
self.view.addSubview(buttonOne)
Vous devez donc utiliser la ligne suivante
containerView.userInteractionEnabled = true