O programa de reprodução automática automaticamente não funciona

Desejo adicionar programaticamente um UIImageView a uma exibição e adicionar restrições para centralizá-lo, vertical e horizontalmente. Com o storyboard, funciona, mas não de forma programática.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var transitionImageView = UIImageView()
        transitionImageView.frame.size = CGSize(width: 60, height: 68)
        transitionImageView.contentMode = UIViewContentMode.ScaleToFill

        var transitionImage = UIImage(named: "SoProxyLogo60pt")
        transitionImageView.image = transitionImage
        self.view.addSubview(transitionImageView)

        // Position
        let transitionImageViewConstraintCenterX = NSLayoutConstraint(item: transitionImageView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0)
        transitionImageViewConstraintCenterX.identifier = "Transition Image View Constraint Center X"
        let transitionImageViewConstraintCenterY = NSLayoutConstraint(item: transitionImageView, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0)
        transitionImageViewConstraintCenterY.identifier = "Transition Image View Constraint Center Y"

        self.view.addConstraint(transitionImageViewConstraintCenterX)
        self.view.addConstraint(transitionImageViewConstraintCenterY)        
    }
}

Eu tenho esses erros:

2014-10-27 14: 45: 18.420 transitTest1 [3438: 70b] Não é possível satisfazer simultaneamente as restrições. Provavelmente, pelo menos uma das restrições na lista a seguir é uma que você não deseja. Tente o seguinte: (1) observe cada restrição e tente descobrir o que você não espera; (2) encontre o código que adicionou as restrições ou restrições indesejadas e corrija-o. (Nota: se você estiver vendo NSAutoresizingMaskLayoutConstraints que você não entende, consulte a documentação da propriedade UIView traduz AutoresizingMaskIntoConstraints)

<NSLayoutConstraint:0x7fbb5b210790 'Transition Image View Constraint Center X' UIImageView:0x7fbb5af682d0.centerX == UIView:0x7fbb5af674f0.centerX>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b25eee0 h=--& v=--& UIImageView:0x7fbb5af682d0.midX == + 30>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b258ee0 h=-&- v=-&- UIView:0x7fbb5af674f0.width == UIViewControllerWrapperView:0x7fbb5b257e20.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b260840 h=-&- v=-&- UIViewControllerWrapperView:0x7fbb5b257e20.width == UINavigationTransitionView:0x7fbb5af5b020.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b2612b0 h=-&- v=-&- UINavigationTransitionView:0x7fbb5af5b020.width == UILayoutContainerView:0x7fbb5af2adf0.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b261d40 h=-&- v=-&- UILayoutContainerView:0x7fbb5af2adf0.width == UIWindow:0x7fbb5b251ba0.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b25ff30 h=--- v=--- H:[UIWindow:0x7fbb5b251ba0(320)]>

Tentará se recuperar quebrando restrições

Quebre objc_exception_throw para capturar isso no depurador. Os métodos na categoria UIConstraintBasedLayoutDebugging no UIView listados em também podem ser úteis.

2014-10-27 14: 45: 18.421 transitTest1 [3438: 70b] Não é possível satisfazer simultaneamente as restrições. Provavelmente, pelo menos uma das restrições na lista a seguir é uma que você não deseja. Tente o seguinte: (1) observe cada restrição e tente descobrir o que você não espera; (2) encontre o código que adicionou as restrições ou restrições indesejadas e corrija-o. (Nota: se você estiver vendo NSAutoresizingMaskLayoutConstraints que você não entende, consulte a documentação da propriedade UIView traduz AutoresizingMaskIntoConstraints)

<NSLayoutConstraint:0x7fbb5b252fd0 'Transition Image View Constraint Center Y' UIImageView:0x7fbb5af682d0.centerY == UIView:0x7fbb5af674f0.centerY>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b25f140 h=--& v=--& UIImageView:0x7fbb5af682d0.midY == + 34>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b258f80 h=-&- v=-&- UIView:0x7fbb5af674f0.height == UIViewControllerWrapperView:0x7fbb5b257e20.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b260930 h=-&- v=-&- UIViewControllerWrapperView:0x7fbb5b257e20.height == UINavigationTransitionView:0x7fbb5af5b020.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b2613b0 h=-&- v=-&- UINavigationTransitionView:0x7fbb5af5b020.height == UILayoutContainerView:0x7fbb5af2adf0.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b261e30 h=-&- v=-&- UILayoutContainerView:0x7fbb5af2adf0.height == UIWindow:0x7fbb5b251ba0.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b262730 h=--- v=--- V:[UIWindow:0x7fbb5b251ba0(480)]>

Tentará se recuperar quebrando restrições

Quebre objc_exception_throw para capturar isso no depurador. Os métodos na categoria UIConstraintBasedLayoutDebugging no UIView listados em também podem ser úteis.

(É difícil ter um bom layout aqui;))

Não entendo por que essas restrições não funcionam, elas parecem iguais às do storyboard