Topics: Autolayout, views, gesture recognizers
Symptom: The gesture recognizer doesn’t work.
Mistake: Making one recognizer and assigning it to four objects.
Each gesture recognizer can only have one owner and each assignment meant that it was just being reassigned to the latest view.
Lesson: Make one gesture recognizer for each object.
Symptom: Constraints were not working.
Mistake: I had assigned constraints to the view.
Lesson: Constraints are sent to the superview. Gesture recognizers are sent to the view.
Symptom: My game’s win conditions were being satisfied when they shouldn’t have been.
Mistake: When comparing the two views’ centers, I checked if the difference was less than a threshold, when I meant to use the absolute value of the difference.
Lesson: Unexpected wins are bugs too. They should be understood as much as bad bugs.
Symptom: My autolayout had more constraints than I thought I had specified.
Mistake: To deal with the iPhone size plus, I had constraints for when trait collections display scale were 3, but had forgotten to wrap the other constraints in an else statement.
Lesson: Those willTransitionToTraitCollection:withTraitCollection: methods can get really complicated and I have to be careful with the large if statements.