UIView Animation with Swift

Here is a very simple way to do UIView Animations in Swift.

First, you create an IBOutlet for a constraint created in Interface Builder in Xcode – in my case, I had a constraint that anchored to the bottom of the containing view. In the code example, the constraint is named “constraintToAnimate”. You just control drag from the Storyboard to your code as you would when connecting a control, but in this case you connect a constraint. It will look something like this (the name of your constraint will hopefully be different):

    @IBOutlet weak var constraintToAnimate: NSLayoutConstraint!

The following snippet is basically a straight-up conversion of Apple’s own Objective-C example given in the documentation article Auto Layout by Example in the Animating Changes Made by Auto Layout section (you may need to scroll down to find that section).

    self.view.layoutIfNeeded()
    UIView.animateWithDuration(0.3, animations: {
        // make constraint changes here...
        self.constraintToAnimate.constant = 250 // your value here.
        self.view.layoutIfNeeded()
        }, completion: {
            (value: Bool) in
            // completion code here...
    })

Basically, in pre-Auto Layout days you would just animate the frame. Today you just animate the constraint. It works great and once you get your head wrapped around it, it’s pretty straightforward.

UIDatePicker Height Inconsistency at Runtime [#iOSDev, #SwiftLang]

Apple needs to fix this one.

There is an inconsistency in the way that the UIDatePicker is rendered in Storyboards in Xcode vs. their rendering at runtime. This problem set me back longer than it should have this morning, since its effect was tricky to diagnose. The basic consequence of this was that the custom UIButton I had attached to the top of the date picker (inside a UIView) was not receiving taps and for the life of me I couldn’t figure out why…

First, to diagnose the problem, I used this tip to get the UIView recursiveDescription method working in my Swift project, and I was able to get a dump of the view hierarchy. From that, I could tell that the UIView I had created as a container was at a Y value of -54, and was therefore outside the bounds that I had set for the custom view, and was not receiving tap events.

Then I stumbled on this Stack Overflow post by Florian Mielke, which suggested that there is a typo-bug somewhere in Xcode or iOS in the rendering of UIDatePicker in a Storyboard vs. Runtime:

iphone – iOS 7 UIDatePicker height inconsistency? – Stack Overflow

“I can confirm that using UI(Date)Picker in storyboards has a different height (162.0) than in “reality” (216.0). Therefore you have to adjust the space to container view to fit that ‘real’ date picker height or try to solve it using auto-layout.”

Reconciling that with the output from recursiveDescription totally agreed with this, and once I increased the size of my custom view, taps were once again being received by the Done button!

How to read a JSON file from your bundle and output the contents as a String in Swift

When you’re first getting started with Swift, even the easiest things may seem a challenge. For example, reading in a JSON file, converting its contents to a String and then sending the result to the console may take a while to figure out (at least, it did for me…).

I needed to do this in my current project for diagnostic purposes, and thought it might be helpful to others, so here’s the little code snippet I used:

    // 1
    let filePath = NSBundle.mainBundle().pathForResource("MyJSONFileName",ofType:"json")
    // 2
    var readError:NSError?
    // 3
    if let data = NSData(contentsOfFile:filePath!, options:NSDataReadingOptions.DataReadingUncached, error:&readError) {
        // 4
        let stringData = NSString(data: data, encoding: NSUTF8StringEncoding)
        // 5
        println("data read: \(stringData)")
    }

As you can see, it’s pretty straightforward.

  1. Create a file path to the file.
  2. Declare an NSError object for use in the reading (this example just eats the error, however).
  3. Read in the data from the JSON file.
  4. Create an NString object, initializing it with the NSString(data:encoding:) method.
  5. Output the result.

How to REALLY Add or Delete a Task or a Container in a Control Flow in Visual Studio 2013

Ridiculous.

I was staring at Visual Studio 2013 in disbelief, looking at the empty Toolbox thinking I missed an installation step, even though all the other functionality of SQL Server Integration Services (SSIS) was working just fine.

After doing a little digging (this time Stack Overflow did not help), it turns out that SSIS has its own dedicated Toolbox, and it’s basically hidden.

Thanks to an article by Robert Bigec, the answer is pretty simple, but not obvious.

The Empty Toolbox – SSIS 2012 | Robert’s Spout.ToString()

I stared at this toolbox in disbelief. White and spacious with a confirming message that gave me no comfort: “There are no usable controls in here … “. What happened to the Source Assistant? Where in the world is the Destination Assistant? Merge: gone! Data Conversion: gone! Forget about adding an Execute SQL Task, this is not happening! I guess, I’m not making any more Integration Services packages, unless I work on another computer, or go back to 2008. Maybe this is a bug. It could be, because it is a new product, right? Maybe I should file a bug report. No, it can’t be a bug, someone would have reported it by now. I must have done something to mess it up. I vaguely remember opening up another project to look at it and closing the toolbox because it was in the way, but it should come back shouldn’t it? Yeah, it should come back, but it didn’t. Desperately searching for some way to get the items back, I trolled the menus, scoured the icons and noticed this. Click! It’s back. Yay! Hoorah! Happy days are back again!

Thanks to Robert for the answer!

 

Smashing Magazine on Lo-Fi Prototyping

Many of my colleagues know that I like to do lo-fi prototypes since I can iterate so much faster on them, get a sense of whether it’s a good design choice or not.

So, it was really nice to see this article on Smashing Magazine by Laura Busche on the subject, entitled The Skeptic’s Guide To Low-Fidelity Prototyping | Smashing Magazine

In it, she shows that:

Low-fidelity prototypes, in particular, are rough representations of concepts that help us to validate those concepts early on in the design process. Throughout this article, we will look at some of the features that make low-fidelity prototyping a unique tool to radically improve your work and to build an environment in which users’ needs can be truly realized.

As it turns out, I’ve recently been using lo-fi paper prototyping for my new app design and it’s been very helpful and, best of all, not time consuming.

Hope this article helps other designers and developers!

Using Temporary Tables in SQL Statements

Found this to be a really helpful tip from Using Temporary Tables in SQL Statements. I wanted to be able to quickly construct a temporary table within a stored procedure and this was just a super-simple set of examples to get that going.

Hope others find it useful as well!

Using Temporary Tables in SQL Statements

Temporary tables can be used in the SQL statement wherever the regular tables can be used. To identify a table being a temporary table in the SQL statement, prefix the table name with the ‘#’ character.

Examples:

// Create a temporary table named Temp1 with two columns
CREATE TABLE #Temp1 ( Name Char( 30 ), seqid integer );

// This example creates two temporary tables for intermediate results
// Step 1. Create a temporary table named DeptCount and at the same time
// populate it with summary data from an existing table in the
// database

SELECT deptnum, count(*) as NumEmployees
INTO #DeptCount
FROM employees
GROUP BY deptnum

// Step 2. Create another temporary table named LocCount which list the
// number of employees in each location for each department.

SELECT deptnum, location, count(*) as cnt
INTO #LocCount
FROM employees
GROUP BY deptnum, location

// Finally using the 2 temporary tables to list the percent of employee
// on each location for each department

SELECT a.deptnum, a.location, ( a.cnt * 100 ) / b.NumEmployees As PercentAtLocation
FROM #LocCount a, #DeptCount b
WHERE a.deptnum = b.deptnum

Gus Mueller on The Wilderness

I’ve been feeling pretty much like this expresses lately, even with all this exciting news lately about iOS 8, iPhone 6/6 Plus, and ?WATCH (Apple WATCH):

The Shape of Everything: The Wilderness

However much time I’ve been doing this for, and no matter how much practice I put into it, there’s one thing that always sneaks up and pulls the rug right from under me. It’s usually between major releases, but not always. It’s a period of time where I’m pretty lost, and I don’t know what to do. I have feature lists, I have open bugs to fix, and I have an outline of where the app is going. But I feel mentally incapacitated, like I’m getting nothing done.

The good news is that I’ve got some exciting ideas brewing that I hope will come to shape soon…

How to add custom extensions to a language in Notepad++ to enable syntax highlighting

I needed to be able to add a new extension to the XML language definition in Notepad++, and found this Super User post to be simple and to-the-point.

Assigning custom extensions to a language’s syntax highlighting in Notepad++ – Super User

When you open a file in notepad++ it will attempt to load syntax highlighting for the contents based on file extension. If you use custom extension for one of the existing languages you can add the custom extension in Settings -> Styler Configurator. Select language and add the extension in “User extension” edit box. To add multiple extensions separate them using space. You then need to re-open your file to see the syntax highlighting applied. You can also change syntax highlighting style by selecting a different language from language menu.

Hope it helps someone else!

Choosing Bitness Inside Business Intelligence Development Studio

Visual Studio came to a screeching halt when attempting to run an SSIS package the other day, and it turns out that it doesn’t like running in 64-bit, at least when we were using this under Visual Studio 2008.

Therefore, here is some help for those frustrated by this (which, incidentally, feels like something the IDE should know about and just switch on its own)…

Choosing Bitness Inside Business Intelligence Development Studio (BIDS)

If you’re running your package inside BIDS, the setup is simple unless you’re using the Execute Package Task or Execute Process Task to run child packages. The package you currently have open will (by default) run in 64 bit mode.  The setting that controls this is a property on the project called Run64BitRuntime.  To access this property, right-click on the Integration Services project in your solution explorer and select Properties.  Then select the Debugging node in the editor.  The default here is “true”, which means all the packages in this project will run in 64-bit mode.  If you change this to “false”, all the packages will be run in 32-bit mode.

Hope this helps!

Running Windows Phone 8 emulator in the Windows 8 virtual machine

Yes! It’s possible!

I am so glad to find out that it is possible to run the Windows Phone 8 emulator in Parallels. I’ll potentially be able to do Windows Phone 8 development via my mac before being able to do it on my corporate-issue Windows 7 machine!

I haven’t tested it yet but it looks promising.

Shouts out to the Parallels development team for making this happen.

 

KB Parallels: Running Windows 8 Phone emulator in the Windows 8 virtual machine