Blog

Shake-to-refresh

January 24, 2009

Let’s talk for a second about things that do not make sense. I don’t know who did it first, but the Facebook app for iPhone doesn’t have a dedicated button to refresh your data… rather, you shake your iPhone to refresh.

Apple introduced shake-to-shuffle in the new iPod nanos. It’s a gimmicky feature, but it makes sense in that context: shake… randomization… shuffle… there’s a connection there.

But what is the connection between shaking and refreshing? (Hint: there isn’t one). My theory is that the folks who made Facebook didn’t have room for a dedicated refresh button, so they figured they could kill two birds with one stone… they could solve the problem of the missing refresh button and cram in a gimmicky feature even though it makes no sense in that context.

(Besides being stupid, the other problem with shake-to-do-something on the iPhone is that the iPhone is heavier and much more expensive than a nano. It’s not something you want to go flying out of your hand).

Some people want me to put shake-to-refresh in Tweetie.

No.

Now, I’m not saying that the refresh button in Tweetie is perfect. The biggest problem is that it doesn’t give enough feedback when it’s actually doing something (I’m adding a activity spinner soon).

The other complaint – notably from @Ihnatko in the recent MacBreak Weekly podcast – is that the refresh button doesn’t belong tucked under the navigation bar at the top of the list. He recommended putting the refresh button in the navigation bar itself, so it’s always visible. That’s not a good solution because both sides of the navigation bar are being used: the left side is for the Accounts back button. The right side is for the Compose button. A few people have suggested cramming the refresh button next to one of the other buttons, e.g. with a UISegmentedControl. That’s a terrible idea because it would make the tap area of each button *way* too small, and would look clutter-y and dumb.

Here’s why the current refresh button placement in Tweetie does make sense. When you tap it, it loads newer tweets. Tapping it will only load tweets that are newer than the current “newest” one. If the refresh button was anywhere else, tapping it would seem like it didn’t actually do anything unless you were scrolled to the top of the list anyway.

It only makes sense to “load newer tweets” when you’re looking at the newest tweet. The same goes for the “load more” button at the bottom. Why would you want to load older tweets unless you’re already staring at the [current] oldest one?

The solution makes sense, saves UI clutter, and preserves screen real-estate (note that the refresh button is scrolled slightly offscreen when you first start Tweetie – there’s no need to have to stare at it because you’re guaranteed to already be looking at the newest tweets).

The solution in Tweetie is not without precedent. Scroll down a page in Safari… note that the navigation/control bar scrolls off the top of the screen with the content. (Update: another example).

FYI, for the millions of you who still don’t know this trick: tap the status bar (the thing at the top with the current time) to scroll to the top of any scrolling view. It works in every app. You can use it in Tweetie to jump to the top and then tap refresh if you want to see the newest stuff fast.