<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brandon Walkin</title>
	<atom:link href="http://www.brandonwalkin.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brandonwalkin.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 03 Jun 2010 18:32:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Xcode UI Improvements</title>
		<link>http://www.brandonwalkin.com/blog/2010/06/03/xcode-ui-improvements/</link>
		<comments>http://www.brandonwalkin.com/blog/2010/06/03/xcode-ui-improvements/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 18:32:06 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=277</guid>
		<description><![CDATA[Xcode is a fantastic development environment for developing Mac, iPhone, and iPad applications. But it has some areas for improvement. In this post, I&#8217;ll explore some improvements to how documentation and autocompletion is integrated into the development workflow and how Xcode could provide specialized interfaces for working with system frameworks.
There are two primary use cases [...]]]></description>
			<content:encoded><![CDATA[<p>Xcode is a fantastic development environment for developing Mac, iPhone, and iPad applications. But it has some areas for improvement. In this post, I&#8217;ll explore some improvements to how documentation and autocompletion is integrated into the development workflow and how Xcode could provide specialized interfaces for working with system frameworks.</p>
<p>There are two primary use cases for accessing documentation. One is immersing yourself in guides to learn the theory behind part of a framework. The other is quick API reference. The latter is where the current documentation workflow in Xcode (the documentation window and Quick Help window) has lots of room to improve. Here are the main problems with the current interaction model:</p>
<ul>
<li>Documentation takes you out of your programming flow. Once you need to access documentation, you have to open a heavyweight window that&#8217;s far from the code you&#8217;re writing, and remove yourself from the context of writing code.</li>
<li>Developers need to manually move information from the documentation window to their code and often vice versa. If I&#8217;m working with a particular class in code and need documentation on it, I occasionally have to tell the documentation window about that class. When I find the particular bit of information I&#8217;m looking for, be it a method name, argument, etc, I have to manually move that bit of information to my code. This makes for a fairly inefficient workflow.</li>
<li>For methods that can only accept a small set of arguments, an additional disclosure interaction is required to view the set of arguments. If I want to set a view controller&#8217;s modal presentation style, for instance, I need to click a hyperlink from the documentation on modal presentation style that takes me to another webpage in order to see the various styles I can set.</li>
<li>The API documentation doesn&#8217;t make use of images in the cases they&#8217;d be appropriate. Paragraphs of text are written to describe what can often be more effectively conveyed using images.</li>
</ul>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/UseImages.png" style="margin: 8px 0 7px 0" alt="Text vs. images"></center></p>
<ul>
<li>Developers have to access documentation because the autocompletion list often isn&#8217;t helpful. Take the autocompletion list for an instance of UIViewController, for example. Every method that can possibly be understood by a standard view controller instance is listed there – even delegate methods for unrelated classes.</li>
</ul>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/Autocompletion.png" style="margin: 8px 0 7px 0" alt="Xcode's autocompletion window"></center></p>
<h4>My Proposal</h4>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/AnchoredDocs.png" style="margin: 8px 0 7px 0" alt="Anchored documentation window"></center></p>
<p>I propose that API documentation is combined with autocompletion. Anywhere in your code where it would make sense to show an autocompletion window, we show this window instead. Rather than show a set of seemingly random methods, we instead show the methods the particular class responds to, with a mechanism to view methods and documentation for the superclass. You can use the cursor or the arrow keys to read the documentation for particular methods, and when you hit Return, the method is added for you and syntax surrounding the method is adjusted appropriately. For instance, if you begin the statement with a call on a class object and you choose an instance method in the documentation window, an &#8220;alloc&#8221; will be added accordingly. </p>
<p>The list on the left consists of methods and properties the class implements, grouped by <i>type of development task</i>. Simply scanning through this list gives you a good understanding of what the class does and how to interact with it. </p>
<p>Compare to the system documentation that groups functionality into properties, instance methods, and class methods (which aren&#8217;t helpful groupings for finding functionality in a class) and sorts items in those sections alphabetically:</p>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/List.png" style="margin: 8px 0 7px 0" alt="Method list"></center></p>
<p>Sidenote: <a href="http://fileability.net/ingredients/">Ingredients</a> deserves credit for being the first documentation viewer I&#8217;ve seen to group methods by task in the source list. Task grouping is one of the main features that makes it such a pleasure to use compared to Xcode&#8217;s viewer and other third-party documentation viewers.</p>
<p>Dragging the window away from the code it&#8217;s inspecting will un-anchor it and let you use the window in more of a back-and-forth reference fashion (much like how Xcode&#8217;s documentation window is used today). The window loses its arrow and a close button and search field appear. The search field will let you search for any symbol in Cocoa or Cocoa Touch (depending on what your project is targeting). Search results appear in a menu below the search field, so you keep your context as you search.</p>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/UnanchoredDocs.png" style="margin: 8px 0 7px 0" alt="Unanchored documentation window"></center></p>
<p>In some cases, we can do even better than autocompleting method and property names. The window gets even more useful in the case of setting a variable that only has a small set of arguments it accepts.</p>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/ModalPresentationStyleDocs.png" style="margin: 8px 0 7px 0" alt="Proposed documentation window integration"></center></p>
<p>A third pane will appear below the documentation with a list of possible arguments, showing images when appropriate. You can arrow over to the argument list, hit Return, and the method name, along with the argument will be entered into your code. </p>
<p>Here are the current set of steps for setting a view controller&#8217;s modal presentation style, if you aren&#8217;t aware of the name of the property:</p>
<ol>
<li>Start typing your statement with the name of the view controller.</li>
<li>Open the documentation window. </li>
<li>Search for UIViewController.</li>
<li>Click modalPresentationStyle under the tasks section of the webpage.</li>
<li>Copy &#8220;modalPresentationStyle&#8221; into your code.</li>
<li>Click UIModalPresentationStyle to get the list of styles.</li>
<li>Find the desired style and copy it into your code.</li>
</ol>
<p>The steps for accomplishing the same task with this interface:</p>
<ol>
<li>Start typing your statement with the name of the view controller.</li>
<li>Hit the keyboard shortcut for showing the autocompletion window.</li>
<li>Select modalPresentationStyle in the source list.</li>
<li>Select the desired style and press Return. The entire statement will be entered in your code.</li>
</ol>
<p>If the developer already knows about the method or property name, Xcode can still be helpful by providing a focused, rich interface for choosing a value.</p>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/ModalPresentationStylePopover.png" style="margin: 8px 0 7px 0" alt="Modal presentation style popover"></center></p>
<h4>Other Contexts</h4>
<p>The contextual disclosure type of interaction is also useful in other contexts. For example, when I want to assign a graphic in my project to a new variable, my interaction with Xcode generally follows this pattern:</p>
<ol>
<li>Start typing out the instantiation statement.</li>
<li>Scroll around in the Groups &#038; Files list looking for where the particular image is nested.</li>
<li>Click the image to see a preview of it to make sure it&#8217;s the image I want.</li>
<li>Copy the image&#8217;s filename.</li>
<li>Press the back button to go back to the code I started at.</li>
<li>Paste the filename and add the required syntax around it.</li>
</ol>
<p>What if while you were in the flow of instantiating an image variable, Xcode showed you a menu with filenames and thumbnails of all the images being bundled with your target?</p>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/imageNamed.png" style="margin: 8px 0 7px 0" alt="Instantiating an image"></center></p>
<p>Now the steps to instantiate an image variable are:</p>
<ol>
<li>Start typing out the instantiation statement.</li>
<li>Hit a keyboard shortcut to show the thumbnail menu.</li>
<li>Choose your desired image and hit return. The rest of the syntax will be entered for you.</li>
</ol>
<p>Another example is setting a view&#8217;s autoresizing mask. An autoresizing mask specifies how a view resizes as its parent view resizes. Interface Builder has a great interface for configuring one of these. You can click on a view&#8217;s edges to specify which edges should be anchored to the edges of the superview. You can also click inside the view to specify whether it should resize vertically, horizontally, both, or neither.</p>
<p>As you click around adjusting those settings, there&#8217;s an animation of a view getting resized as its parent view resizes, giving you instant feedback showing you how your changes will affect resizing of the view.</p>
<p>The interaction for setting an autoresizing mask in Xcode is second-class in comparison. Regardless of if you use property syntax or message passing syntax, the autocompletion window won&#8217;t give you anything useful. You have to go into a documentation window outside of your flow, search for autoresizingMask, click to see the values that can be passed in, know that you have to bitwise OR these together, know the syntax for bitwise OR, and construct a long statement with values copied from the documentation window.</p>
<p>Like Interface Builder, Xcode should know what an autoresizing mask is and show you a usable interface for setting one.</p>
<p><center><img src="http://brandonwalkin.com/blog/images/Xcode/AutoresizingMask.png" style="margin: 8px 0 7px 0" alt="Setting a view's autoresizing mask"></center></p>
<p>In this post, I&#8217;ve explored just a few use cases and improvements. But there&#8217;s nearly endless potential for an Xcode that truly understands the frameworks being used and provides effective interfaces for interacting with them. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2010/06/03/xcode-ui-improvements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iTunes Visual Redesign</title>
		<link>http://www.brandonwalkin.com/blog/2009/09/21/itunes-visual-redesign/</link>
		<comments>http://www.brandonwalkin.com/blog/2009/09/21/itunes-visual-redesign/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 20:40:46 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=272</guid>
		<description><![CDATA[iTunes 9 was released a couple weeks ago with a significant number of user interface changes. It&#8217;s always interesting to look at the direction that&#8217;s taken with the iTunes UI because it&#8217;s often used as a testing bed for future iterations of the Mac OS X user interface. I thought it would be fun to [...]]]></description>
			<content:encoded><![CDATA[<p>iTunes 9 was released a couple weeks ago with a significant number of user interface changes. It&#8217;s always interesting to look at the direction that&#8217;s taken with the iTunes UI because it&#8217;s often used as a testing bed for future iterations of the Mac OS X user interface. I thought it would be fun to spend a weekend thinking about the iTunes visual design and giving it a minor refresh.</p>
<h4>The Design</h4>
<p><center><a class="largethumb" title="iTunes Redesign" href="http://brandonwalkin.com/blog/images/iTunes/RedesignFull.png"><img src="http://brandonwalkin.com/blog/images/iTunes/RedesignThumb.png" style="margin: 13px 0 15px 0" alt="iTunes Redesign"></a><br />
For comparison:<br />
<a class="largethumb" title="iTunes 8" href="http://brandonwalkin.com/blog/images/iTunes/iTunes8Full.png"><img src="http://brandonwalkin.com/blog/images/iTunes/iTunes8Thumb.png" style="margin: 5px 0 15px 0" alt="iTunes 8"></a><a class="largethumb" title="iTunes 9" href="http://brandonwalkin.com/blog/images/iTunes/iTunes9Full.png"><img src="http://brandonwalkin.com/blog/images/iTunes/iTunes9Thumb.png" style="margin: 5px 0 15px 0" alt="iTunes 9"></a></center></p>
<h4>Toolbar</h4>
<p><center><img src="http://brandonwalkin.com/blog/images/iTunes/ToolbarLeft.png" style="margin: 13px 0 15px 0" alt="Toolbar - Left Side"><br />
<img src="http://brandonwalkin.com/blog/images/iTunes/ToolbarRight.png" style="margin: 13px 0 15px 0" alt="Toolbar - Right Side"></center></p>
<h4>Display</h4>
<p><center><img src="http://brandonwalkin.com/blog/images/iTunes/Displays.png" style="margin: 13px 0 15px 0" alt="Displays"></center></p>
<h4>Table Headers</h4>
<p><center><img src="http://brandonwalkin.com/blog/images/iTunes/Headers.png" style="margin: 13px 0 15px 0" alt="Table Headers"></center></p>
<h4>Scrollbars</h4>
<p><center><img src="http://brandonwalkin.com/blog/images/iTunes/Scrollbars.png" style="margin: 13px 0 15px 0" alt="Scrollbars"></center></p>
<h4>Checkboxes</h4>
<p><center><img src="http://brandonwalkin.com/blog/images/iTunes/Checkboxes.png" style="margin: 13px 0 15px 0" alt="Checkboxes"></center></p>
<p>I&#8217;m closing the comments so I don&#8217;t have to sort through spam. If you&#8217;ve got feedback, feel free to hit me up on <a href="http://twitter.com/bwalkin">Twitter</a>.<br />&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2009/09/21/itunes-visual-redesign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing UI Complexity</title>
		<link>http://www.brandonwalkin.com/blog/2009/08/10/managing-ui-complexity/</link>
		<comments>http://www.brandonwalkin.com/blog/2009/08/10/managing-ui-complexity/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 18:19:08 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=152</guid>
		<description><![CDATA[Interface complexity is an issue every designer wrestles with when designing a reasonably sophisticated application. A complex interface can reduce user effectiveness, increase the learning curve of the application, and cause users to feel intimidated and overwhelmed. 
I&#8217;ve spent the past year redesigning a particularly complex application with my primary focus being on reducing complexity. [...]]]></description>
			<content:encoded><![CDATA[<p>Interface complexity is an issue every designer wrestles with when designing a reasonably sophisticated application. A complex interface can reduce user effectiveness, increase the learning curve of the application, and cause users to feel intimidated and overwhelmed. </p>
<p>I&#8217;ve spent the past year redesigning a particularly complex application with my primary focus being on reducing complexity. In this article, I&#8217;ll go over some of the issues surrounding complexity and techniques that can be used to manage it.</p>
<h4>Progressive Disclosure</h4>
<p>Progressive disclosure is the most popular means of managing complexity. The idea is that clutter and cognitive overhead can be reduced by hiding less frequently used elements behind some avenue of accessing those elements, like a mouse click or a keyboard shortcut. It requires that the designer accurately determine which elements are frequently and infrequently used and to what degree. </p>
<p>Quite a bit of care needs to be put into the progressive disclosure hierarchy and the mechanisms used for disclosure. Poorly considered use of progressive disclosure can achieve the opposite of the intended effect by making the interface even more complex. As an example, Microsoft Windows has been trending towards removing the menu bar from individual windows and instead packing each function into the main interface (often using pull down menus), which has some issues. I&#8217;ll go over a few of them:</p>
<ul>
<li>There are inconsistent ways of accessing common functionality. The Print function, for example, is in different locations in both the application&#8217;s interface and the progressive disclosure hierarchy. The Print controls in Internet Explorer, Contacts (Windows Explorer), and WordPad are highlighted in the screenshot below, to illustrate this. Competing first-party Mac applications (Safari, Address Book, and TextEdit, respectively) have the Print function available in a consistent location – the last item in the File menu. A user who learns how to print in one of those Mac applications won&#8217;t have to hunt to find the Print function in other applications. It&#8217;s a &#8220;learn once, use everywhere&#8221; model.
<p><center><a class="largethumb" title="Print Buttons" href="http://brandonwalkin.com/blog/images/PrintButtons.png"><img src="http://brandonwalkin.com/blog/images/PrintButtonsThumb.png" style="margin: 13px 0 15px 0" alt="Print Buttons"></a></center></p>
<li>There&#8217;s a tendency to overwhelm the user with progressive disclosure points. The default Internet Explorer interface (with Windows Live installed) has a total of <i>17 pull down buttons</i> – highlighted below. Further, all of these progressive disclosure controls require screen real estate. As more screen real estate is occupied by administrative actions, less is dedicated to displaying the actual content of the application (which, in this case, are webpages).
<p><center><a class="largethumb" title="IE 8 Pull Down Buttons" href="http://brandonwalkin.com/blog/images/IE8PullDown.png"><img src="http://brandonwalkin.com/blog/images/IE8PullDownThumb.png" style="margin: 13px 0 15px 0" alt="IE 8 Pull Down Buttons"></a></center></p>
</ul>
<h4>Contextual Actions</h4>
<p>This is a form of progressive disclosure where contextually appropriate controls are exposed on a particular object. The most common implementation are contextual menus, activated on the Mac by a right-click or a control-click. While contextual menus are a consistent and useful way of revealing contextual actions on objects, they&#8217;re hard to discover, which makes them inappropriate for workflow-critical actions that necessitate greater weight in the interface. </p>
<p>The standard way to give these actions greater weight is to integrate them in your interface by providing the set of contextual controls in front of or near each object. Complexity is increased substantially, because the set of controls is repeated for every object on screen. We can get rid of most of this complexity by using a different progressive disclosure technique. Controls can be displayed on a single object if the object is selected, the object has focus, or when the mouse is over the object. This solves the complexity issue since there&#8217;s only one set of contextual controls being shown at a particular time, but it&#8217;s not without its downsides. Consider whether this sort of technique is appropriate for your interface before deciding one way or the other.</p>
<h4>Alignment &#038; Visual Hierarchy</h4>
<p>Aligning elements in a user interface to a simple, consistent grid, will go great lengths in reducing the appearance of complexity. The use of strict alignment and a thoughtfully laid out grid can turn an interface from chaotic and overwhelming to harmonious and appealing. </p>
<p>Some compelling examples are the inspectors in Microsoft Expression Blend and Adobe Lightroom. While a host of factors are responsible for the Expression Blend inspector looking considerably more complex than the Lightroom inspector, the rough horizontal alignment is certainly a primary one. The horizontal alignment lines have been drawn in red to illustrate the differences. </p>
<p><center><a class="largethumb" title="Lightroom and Expression Blend" href="http://brandonwalkin.com/blog/images/LightroomVsExpressionBlend.png"><img src="http://brandonwalkin.com/blog/images/LightroomVsExpressionBlendThumb.png" style="margin: 13px 0 15px 0" alt="Lightroom and Expression Blend"></a></center></p>
<p>The examples shown above also demonstrate the effectiveness of the techniques used in each interface to indicate hierarchy. The Lightroom inspector has very strong visual distinctions between section headings and their contents. Headings are prominent. Set in large type with generous padding and a relatively high contrast foreground-background color combination, sections, headings, and the relationships between them are immediately clear. </p>
<h4>Visual Noise &#038; Contrast</h4>
<p>The amount of visual noise in an interface has a great deal of impact on the perceived complexity of the interface. And contrast plays an important role with respect to visual noise. Using lower contrast UI elements reduces visual noise which will often reduce the effective complexity of the interface, as you&#8217;ll see in the next couple of examples. </p>
<p>The Address Book UI eschews fields with relatively high contrast borders in favour of fields with borders that are only visible if the field has focus. This causes the fields to blend in with the rest of the interface. The Create Contact window in Entourage 2008 uses the standard window background color and standard text field styling which contributes to the interface looking more complex than the Address Book interface. </p>
<p><center><a class="largethumb" title="Address Book and Entourage" href="http://brandonwalkin.com/blog/images/AddressBook.jpg"><img src="http://brandonwalkin.com/blog/images/AddressBookThumb.png" style="margin: 13px 0 15px 0" alt="Address Book and Entourage"></a></center></p>
<p>As another example, I&#8217;ve taken the Filter window in Aperture 2.0 and mocked up what it would look like with the transparent controls from iLife &#8216;08 (and parts of iLife &#8216;09) with high contrast edges instead of the relatively low contrast controls that it shipped with. The UI I&#8217;ve mocked up looks notably more complex than the shipping interface because of the higher contrast controls. Simply adjusting the styling of your controls can have a considerable impact on complexity. </p>
<p><center><a class="largethumb" title="Aperture mockup" href="http://brandonwalkin.com/blog/images/ApertureContrast.png"><img src="http://brandonwalkin.com/blog/images/ApertureContrastThumb.png" style="margin: 13px 0 15px 0" alt="Aperture mockup"></a></center></p>
<h4>Use of Icons</h4>
<p>Interfaces widely regarded as complex with high learning curves are often characterized by an abundance of icons or glyphs that lack descriptive labels. When a user opens an application for the first time with an interface covered in label-less glyphs, it can be quite daunting. Every icon with a non-obvious meaning will have to be learned for the user to feel any sort of mastery over the application. </p>
<p>This is a difficult problem to solve. There often isn&#8217;t room for a label to sit next to an icon, and in many cases there is cost involved in replacing an icon with a label (mainly, users will not be able to quickly scan the interface for the icon). Deciding when to use an icon, a label, or both, is an art all in itself. </p>
<p>Nevertheless, here are some tips for those faced with this issue:</p>
<ul>
<li>Revamp your icons so they convey their meaning more effectively. Improve metaphors, adjust sizes, colors, etc.
<li>Use grouping to imply meaning. Grouping related icons together can often provide sufficient context to imply their function.
<li>Using progressive disclosure, place less often used icon-only buttons in a pull down menu with both icons and their labels. A nice benefit of this is that the user will learn the meaning of each icon when they use the pull down menu, and if the menu is designed to be used early on in a user&#8217;s experience with the application, you can get away with using those icons without labels in other places in the app (since the user will have already learned their meanings at that point).
</ul>
<h4>Mental Models</h4>
<p>A great way to reduce effective complexity is to align the conceptual model expressed by your interface with your user&#8217;s mental model as closely as possible. A poorly thought out model contributes to complexity by adding a significant amount of cognitive work that your users have to perform to learn your interface. </p>
<p>The recurrence UI in Windows Calendar, for instance, reflects the developer&#8217;s model of the task rather than the user&#8217;s model. Take a look at the second set of radio options in this screenshot: </p>
<p><center><img src="http://brandonwalkin.com/blog/images/WindowsCalendar.png" style="margin: 15px 0 15px 0" alt="Windows Calendar"></center></p>
<ol>
<li type="a">What&#8217;s the &#8220;28th last day of the month&#8221;?
<li type="a">What&#8217;s the &#8220;4th last Tuesday of the month&#8221;?
<li type="a">How long did you spend trying to work that out?
</ol>
<p>These options feel complex because the language used and functionality that&#8217;s represented doesn&#8217;t reflect your understanding of repeating events. Combat this issue by researching how your users conceptualize relevant tasks so your models are intuitive. You can read more about mental models in the <a href="http://developer.apple.com/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGHIDesign/XHIGHIDesign.html#//apple_ref/doc/uid/TP30000353-CJBDDFAJ">HIG</a>. </p>
<h4>Use your Judgement</h4>
<p>Finally, use your own judgement. There are costs associated with nearly every technique I&#8217;ve listed here. Carefully consider each technique in the context of your interface and determine which are most appropriate for your application and how best to apply them. <br />&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2009/08/10/managing-ui-complexity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BWToolkit 1.2</title>
		<link>http://www.brandonwalkin.com/blog/2009/06/18/bwtoolkit-12/</link>
		<comments>http://www.brandonwalkin.com/blog/2009/06/18/bwtoolkit-12/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 21:12:41 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=143</guid>
		<description><![CDATA[BWToolkit 1.2 is out with three new additions along with other improvements and fixes. The first addition is a gradient box which lets you draw a rectangle with a gradient or solid color. It also has optional border and inset lines. The next addition is a styled text field which lets you apply a gradient [...]]]></description>
			<content:encoded><![CDATA[<p>BWToolkit 1.2 is out with three new additions along with other improvements and fixes. The first addition is a gradient box which lets you draw a rectangle with a gradient or solid color. It also has optional border and inset lines. The next addition is a styled text field which lets you apply a gradient and a shadow to text. An example of what you&#8217;ll be able to create in Interface Builder with these two additions is this <a href="http://brandonwalkin.com/blog/images/CapoPurchaseScreen.png">fancy header bar</a> in Capo. The last addition is a hyperlink button that lets you link text or images to URLs which will open in the browser. </p>
<p>For a complete list of what&#8217;s new in 1.2 and to download the plugin and framework, visit the <a href="http://brandonwalkin.com/bwtoolkit/">BWToolkit website</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2009/06/18/bwtoolkit-12/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>BWToolkit 1.1: Codeless Split Views</title>
		<link>http://www.brandonwalkin.com/blog/2009/02/24/bwtoolkit-11-codeless-split-views/</link>
		<comments>http://www.brandonwalkin.com/blog/2009/02/24/bwtoolkit-11-codeless-split-views/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 18:50:27 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=104</guid>
		<description><![CDATA[I&#8217;m pleased to announce that BWToolkit 1.1 is now available for download with a brand new split view. The new BWSplitView has three main features:

Subview autosizing: In the inspector, the developer can tell the split view which subviews should resize with the window and which should remain at a fixed size. The standard behavior of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pleased to announce that BWToolkit 1.1 is now available for download with a brand new split view. The new BWSplitView has three main features:</p>
<ol>
<li><strong>Subview autosizing: </strong>In the inspector, the developer can tell the split view which subviews should resize with the window and which should remain at a fixed size. The standard behavior of NSSplitView is to ignore the autosizing masks on the subviews and resize them proportionally as the split view resizes. This is not the desired behavior for most applications. BWSplitView honors each subview&#8217;s autoresizing mask which is easily configurable in both the BWSplitView inspector and the subview&#8217;s size inspector.</li>
<li><strong>Constraints: </strong>Each subview&#8217;s minimum and maximum size is configurable in the BWSplitView inspector. You can specify the size in points or as a percentage of the split view&#8217;s size.</li>
<li><strong>Collapsing:</strong> BWSplitView has powerful new collapsing functionality. A view marked as &#8220;collapsible&#8221; in the inspector will collapse when its divider has been double clicked and when the user tries to make the view smaller than its minimum size. You can also hook up a toggle button to the split view&#8217;s toggleCollapse: action which will collapse or expand the subview using Core Animation. The split view takes care of synchronizing its state with the toggle button, so the button never shows the opposite indication.</li>
</ol>
<p>The reason I call the split view &#8220;codeless&#8221; is that for the vast majority of use cases, the developer will not have to write a single line of code to get the split view functionality they desire. For other use cases that do require something out of the ordinary, the developer can set themselves as the delegate on the split view and implement any relevant delegate methods.</p>
<p>In the video below, I create iCal&#8217;s split view layout, with maximum and minimum sizes for subviews, subview collapsing with animation, and proper autoresizing behavior, all within Interface Builder – and it takes less than 3 minutes.</p>
<p><a class="nounderline" href="http://brandonwalkin.com/blog/videos/iCalSplitView.mov"><img src="http://brandonwalkin.com/blog/images/icalstyle.png" alt="iCal-style Interface" /></a><br />
&nbsp;<br />
I&#8217;d love to hear your thoughts on the split view and any ideas you may have for improvements. <a href="mailto:bwalkin@gmail.com">Drop me a line</a> or <a href="http://bitbucket.org/bwalkin/bwtoolkit/issues/">file a bug</a>.</p>
<p>And a big thanks to Fraser Kuyvenhoven for developing the split view&#8217;s resizing algorithm.<br />
&nbsp;</p>
<p style="text-align: center;"><a class="nounderline" href="http://brandonwalkin.com/blog/bwtfiles/BWToolkit.zip"><img src="http://brandonwalkin.com/blog/images/download.png" alt="Download BWToolkit" /></a></p>
<p style="text-align: center;"><a class="lowcontrast" href="http://www.bitbucket.org/bwalkin/bwtoolkit/">Source Code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2009/02/24/bwtoolkit-11-codeless-split-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://brandonwalkin.com/blog/videos/iCalSplitView.mov" length="15771555" type="video/quicktime" />
		</item>
		<item>
		<title>BWToolkit 1.0.2</title>
		<link>http://www.brandonwalkin.com/blog/2008/11/19/bwtoolkit-102/</link>
		<comments>http://www.brandonwalkin.com/blog/2008/11/19/bwtoolkit-102/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 17:10:33 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=98</guid>
		<description><![CDATA[BWToolkit 1.0.2 is now out with some added functionality. The selectable toolbar has some new methods for setting its selected item, which is useful if you want to display the window with a certain tab selected, or want to select a certain tab from within another tab. You specify which item should be selected by [...]]]></description>
			<content:encoded><![CDATA[<p>BWToolkit 1.0.2 is now out with some added functionality. The selectable toolbar has some new methods for setting its selected item, which is useful if you want to display the window with a certain tab selected, or want to select a certain tab from within another tab. You specify which item should be selected by passing in the item identifier, which is a unique, non-localizable string.</p>
<p>To make this process simpler, a new item has been added to the plugin to allow you to easily specify a toolbar item&#8217;s identifier in Interface Builder. This item can be used with standard toolbars as well as selectable toolbars.</p>
<p>As for other improvements, the size of the framework bundle has been reduced by 40% by using Apple&#8217;s TIFF compression instead of Adobe&#8217;s and a few bugs have been fixed. See the release notes for details on the particular bug fixes.<br />
&nbsp;</p>
<p style="text-align: center;"><a class="nounderline" href="http://brandonwalkin.com/blog/bwtfiles/BWToolkit.zip"><img src="http://brandonwalkin.com/blog/images/download.png" alt="Download BWToolkit" /></a></p>
<p style="text-align: center;"><a class="lowcontrast" href="http://www.bitbucket.org/bwalkin/bwtoolkit/">Source Code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2008/11/19/bwtoolkit-102/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing BWToolkit</title>
		<link>http://www.brandonwalkin.com/blog/2008/11/13/introducing-bwtoolkit/</link>
		<comments>http://www.brandonwalkin.com/blog/2008/11/13/introducing-bwtoolkit/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 18:20:42 +0000</pubDate>
		<dc:creator>Brandon Walkin</dc:creator>
				<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://www.brandonwalkin.com/blog/?p=89</guid>
		<description><![CDATA[Update: BWToolkit now has its own website.
BWToolkit is a BSD licensed plugin for Interface Builder 3 that contains commonly used UI elements and other useful objects. Using these objects is as simple as dragging them from the library to your canvas or document window.
When I first heard about the plugin architecture in IB 3, I [...]]]></description>
			<content:encoded><![CDATA[<p>Update: <a href="http://brandonwalkin.com/bwtoolkit/">BWToolkit now has its own website</a>.</p>
<p>BWToolkit is a BSD licensed plugin for Interface Builder 3 that contains commonly used UI elements and other useful objects. Using these objects is as simple as dragging them from the library to your canvas or document window.</p>
<p>When I first heard about the plugin architecture in IB 3, I saw a huge potential for improving the developer user experience and lowering the barrier to entry for developers who are new to Cocoa. I hope to have accomplished that with this plugin. Read on for details regarding the items in BWToolkit and screencasts showing how they work. Be sure to read the release notes if you&#8217;re interested in downloading the plugin. It has installation instructions and known issues that users of this plugin should be aware of.</p>
<h4>&#8220;No Code&#8221; Preferences Windows and Tabbed Sheets</h4>
<p>With the Selectable Toolbar item in this plugin, you&#8217;ll be able to create preferences windows and tabbed sheets without writing a line of code. Using BWToolkit to create a preferences window or a tabbed sheet is radically simpler than conventional means. You don&#8217;t have to write a controller class or fiddle with plists and multiple nib/xib files. It&#8217;s drag and drop. Watch the videos below to see it in action.</p>
<p><a class="nounderline" href="http://brandonwalkin.com/blog/videos/PreferencesWindow.mov"><img src="http://brandonwalkin.com/blog/images/preferenceswindow.png" alt="Preferences Window" /></a><br />
<a class="nounderline" href="http://brandonwalkin.com/blog/videos/TabbedSheet.mov"><img class="toppadding" src="http://brandonwalkin.com/blog/images/tabbedsheet.png" alt="Tabbed Sheet" /></a></p>
<h4>Transparent Controls</h4>
<p>BWToolkit contains a suite of controls for transparent windows (or HUD windows). Provided controls include a button, pop-up button, check box, slider, text field, text view, table view, and a check box cell for a table view. If you find yourself needing a much wider array of controls than the ones available here, a standard panel may be more appropriate for your particular interface.</p>
<p><img src="http://brandonwalkin.com/blog/images/transparent3.png" alt="" /></p>
<h4>Button Bars</h4>
<p>The plugin includes an anchored button bar, anchored buttons, and unanchored buttons. An anchored button bar is one that is placed directly below a view (in other words, <em>anchored</em> to that view). Anchored button bars often appear at the bottom left of windows below source lists (like in Mail.app), below a table view with padding below the bar (like the Network pref pane), or run all the way across the bottom of the window (like in AppZapper). The anchored button bar library item handles all three of these modes.</p>
<p>Unanchored buttons are usually placed below a table view with a bit of padding separating the view from the buttons. They&#8217;re often configured to have a plus button beside a minus button. The unanchored buttons are similar to &#8220;Gradient Buttons&#8221; in Interface Builder, but tweaked to aesthetically replicate the +/- buttons in System Preferences. For instance, when a button is disabled, only the glyph dims, so the group of buttons remain a visually cohesive unit.</p>
<p>Using the anchored button bar and the gradient split view included in the plugin, you can easily create a Mail.app style interface. When an anchored button bar is dropped in a vertical split view, the split view is automatically configured to resize when the user drags the resize handle on the button bar. It&#8217;s also configured to keep the source list the same width while the window is resized &#8211; the standard split view behavior is to resize all of its subviews. Lastly, the left most view is constrained within a minimum and maximum width (which is configurable in the button bar inspector).</p>
<p><a class="nounderline" href="http://brandonwalkin.com/blog/videos/MailStyle.mov"><img src="http://brandonwalkin.com/blog/images/mailstyle.png" alt="Make a Mail.app style interface" /></a></p>
<h4>Bottom Bars</h4>
<p>With this plugin, you&#8217;ll be able to add a bottom bar to a window and it will appear on your canvas. This makes sizing and placement of controls on or around the bottom bar a trivial exercise. There are four bottom bars to choose from: mini size, small size, regular size, and one for sheets.</p>
<p>There are also some controls for bottom bars included in the plugin. You&#8217;ll find plus and minus glyphs for regular size Round Textured buttons, a text field with an inset (or etched) appearance, and a textured slider.  The textured slider comes pre-configured with the two most popular indicators in Mac apps: speaker and photo. If you opt to use them, you&#8217;ll find that the click actions for the two indicators are conveniently already hooked up to the slider.</p>
<p><img src="http://brandonwalkin.com/blog/images/bottombar.png" alt="" /></p>
<h4>And More</h4>
<p>There are a few other items in the plugin that haven&#8217;t been listed yet or shown in a screencast: split views with adjustable divider colors, Fonts and Colors toolbar items from iWork &#8216;08, and a fancy gradient token field.</p>
<p>If you have any questions or comments, feel free to <a href="mailto:bwalkin@gmail.com">email</a> me or ping me on <a href="http://twitter.com/bwalkin">Twitter</a>.<br />
 </p>
<p style="text-align: center;"><a class="nounderline" href="http://brandonwalkin.com/blog/bwtfiles/BWToolkit.zip"><img src="http://brandonwalkin.com/blog/images/download.png" alt="Download BWToolkit" /></a></p>
<p style="text-align: center;"><a class="lowcontrast" href="http://www.bitbucket.org/bwalkin/bwtoolkit/">Source Code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonwalkin.com/blog/2008/11/13/introducing-bwtoolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://brandonwalkin.com/blog/videos/MailStyle.mov" length="16348176" type="video/quicktime" />
<enclosure url="http://brandonwalkin.com/blog/videos/TabbedSheet.mov" length="7955023" type="video/quicktime" />
<enclosure url="http://brandonwalkin.com/blog/videos/PreferencesWindow.mov" length="9531779" type="video/quicktime" />
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.215 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-06-19 13:06:55 -->
