animating positions in autolayout

Animations in Swift are pretty straight forward:

UIView.animateWithDuration(0.5, delay: 0.1, options: UIViewAnimationOptions.TransitionNone, animations: { () -> Void in                          
  self.lbl.alpha = 0.0;
}, completion: { (finished: Bool) -> Void in
   self.lbl.hidden = true
})

but if the position of an element was done by “autolayout” the order is a bit more tricky.

Step 1: you need to set up the connection in “Interface Builder” to a member like this:

@IBOutlet var topConstraint:NSLayoutConstraint!;

Step 2: the animation:

// recommended, although probably not neccesary
self.view.layoutIfNeeded() 

self.topConstraint.constant = -30.0;
UIView.animateWithDuration(annitime, delay: 0.1, options: UIViewAnimationOptions.TransitionNone, animations: { () -> Void in
self.view.layoutIfNeeded()
                    }, completion: { (finished: Bool) -> Void in
                        
                })

valid as of Swift 2.1, found here

moving to SWIFT (slowly…)

I’m learning swift. And these series of posts is about the troubles i am facing. Mostly because i did not spend enough time to completely understand the documentation, but also because swift changes fast and LOTS of examples and posts on the internet are already out of date.

For example i found heaps of broken “cellForRowAtIndexPath” implementations.

This one does work(as of today….):

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cellIdentifier = "TableCell1"
        var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)
        
        if (cell==nil) {
            cell = UITableViewCell.init(style: .Subtitle, reuseIdentifier: cellIdentifier)
            
        }
        cell?.textLabel?.text = "CellTextlabelText\(indexPath.row)"
        return cell!
    }

Another one that was more difficult than anticipated was “prepareForSegue”

    override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {

            let next:ListeTableView = segue!.destinationViewController as! ListeTableView
        
            next.daten = self.daten
        
    }

both viewcontrollers have an array of Objects as a member:

import UIKit

class ListeTableView: UITableViewController {
    
    var daten: [Shops] = []
    
// more....


}