I've developed quite a few apps for iOS and am giving OSX apps a go. What would be the best approach to designing a UI like the split view on iPad apps? For a mac-based example, think of how the playlists work in iTunes. You select an option on the left, and a table view selects a different set of data based on what you selected.
Any ideas?
That sort of interface is known as a source list or source view. It's actually a special style applied to an outline view. Apple provides the SourceView sample code which illustrates the technique.
Related
I currently have an iPhone app thats uses xib's as the graphical interface.
We are planning to make an iPad app using the same code, but with a completely different graphical interface.
I really like storyboards because of the nice flow and overview and was thinking of using it only for the iPad, but I'm also considering not to because:
Is it bad practice to have one for iPad but not for iPhone?
The seque and push/present can probably be confusing?
Having more developers in a storyboard can give merge nightmares?
Thanks in advance
Is it bad practice to have one for iPad but not for iPhone?
If you continue to use only XIBs, do the same for both if its a universal app. It will be confusing for others who may work on your code. And you might end up with a lot of if else code.
The seque and push/present can probably be confusing?
Once you get used to it, its really a useful way of navigating between controllers. If you have any specific questions do point it out.
Having more developers in a storyboard can give merge nightmares?
Its just a XML document, any versioning system out there can handle merges pretty easily. As with any file if two or more developers have worked on same piece of code (in this case can be color change, layout change) then yes it will get conflicted. And developers should be in sync. If one dev is changing the whole structure of the controllers then yes it will be a nightmare. You need to wait and get the latest working copy and ammend your changes.
And you dont have to put all eggs in one basket. You can have multiple storyboards as well.
I am planning to develop my first app in Cocoa. I have been collecting ideas for the UI and have settled in with the design very similar to iPhoto (i.e. library style or 'shoebox' application as referred by Apple's programming guide). In a nutshell I need master detail kind of setup like in iOS (iPad's UISplitview).
To achieve this should I put a NSSplitview and on the left panel have a NSTableView and on the right panel have a NSCollectionView?
Are there any examples/boilerplate or tutorials for creating app in OS X?
Your instincts are correct. You might decide eventually you want something more customizable that an NSCollectionView, but it’ll get you started fast and you can do most of what iPhoto does with it. (You can’t do rows with varying #s of items on them, like Delicious Library does, unless you write your own view.)
I am learning cocoa, and I am creating an application that will require similiar layout to the screenshot below (this seems like a very common layout approach).
What kind of controls/architecture would this type of Cocoa application be?
I'm still in my early stages of learning/reading, and I know of document based applications only so far, but this type of layout doesn't seem to look like a document based app since it doesn't really require multiple windows opened.
If it isn't document, is there a name for other design patters or layouts?
From what I now so far, I would describe this like:
I would be grateful if someone could give me a detailed overview of the high level design for an app like this i.e. things like: # of panels, views used, controls, controllers etc?
Also, a few quick sub-questions:
what kind of menu controls are those in the left pane, then expand and display sub elements?
When preferences windows are displayed, what is that effect called that makes it display in an animated way (like the address book does), where it is a small window that expands to its correct size in an animated fashion.
You are right that this is probably not a document based application, as they open documents in new windows by default.
To layout the window like that, there’d be an NSSplitView that contains the 3 panes. Each pane may optionally contain a view loaded from an NSViewController, which can help keep the code modularised, but it depends on what you’re trying to do if this is appropriate.
The left pane would be an NSOutlineView (a NSTableView subclass), the middle an NSTableView, but I’m not sure exactly how the right-hand side view would be created (lots of custom NSViews and other things, possibly WebView)
That popover options window is possibly a NSPopover (which contains an NSViewController), but that’s only compatible with OS X 10.7, so may also be totally custom for backwards compatibility and easier customisation.
Also note this is a fairly complicated example you’ve given, with lots of custom controls that are probably harder to create than they look:
To get the outline views on the left to have unread counts and icons (from memory) is not built into AppKit, so was all custom created. To do things like that, you’ll need a solid understanding of NSCell vs NSView, and ideally also know about Core Animation layer backed views, and what to use for different aspects.
The window has a taller-than usual title bar. This means the developer probably had to do some crazy stuff to get it to work, if not create the whole window from scratch.
That’s just the start. There’s lots of really nice design in there that’s custom and done from scratch.
Designing Mac apps can be hard sometimes. AppKit is pretty old (back from the NEXT days), and has lots of legacy stuck in it. UIKit on iOS on the other hand is quite nice – Apple clearly learned from their past and made things much better.
I’ve hardly touched on the controllers and model behind all that. There’s lots of different ways you could do it. For persistence, you could use CoreData, sqlite, NSKeyedArchived, just to name a few. Brent Simmons (past developer of another RSS reader, NetNewsWire) wrote some interesting blog posts about that:
http://inessential.com/2010/02/26/on_switching_away_from_core_data
http://inessential.com/2011/09/22/core_data_revisited
The way you design your model & controllers really depends on the specific problem. Cocoa really forces you to stick to MVC though – if you don’t, things are guaranteed to end up messy.
I hope that all helps! I’m really only just learning myself too.
Apple refers to this type of application design as Single-window, library- (or “shoebox”) style and gives a number of recommendations for this design choice in the docs.
(see Mac App Programming Guide)
I'm designing a simple Cocoa app. This is basically my second Cocoa app (despite being good at CocoaTouch), so I'm looking for an in-depth pros/cons analysis of 2 possible solutions for a window flipping problem.
What I'm trying to make is an utility app that sits in the menu bar and has its preferences o its “flip” side, Dashboard-style. It would flip from http://cl.ly/1G2M3J2c142Z0V3K0R2e to http://cl.ly/021z2v2h232x310z1g2q and back.
There are multiple questions on SO about the implementation of this effect:
Core Animation window flip effect
Widget "flip" behavior in Core Animation/Cocoa
Flipping a Window in Cocoa
I've looked at the example code there. Besides neither of them being as smooth as Dashboard widgets (but I'm yet to get to “making it smooth” part), they also share another trait -- they all flip between two different windows.
Now, coming from iOS, the way I started implementing it is to have a single window, but swap between two NSViews.
So what are the pros and cons of these two approaches, and why did multiple unrelated Cocoa developers pick the first one?
Have two NSWindow's, and flip between them (hiding one and showing the other halfway through the flip).
Have a single NSWindow, but two NSView's, and switch the views halfway through the flip.
Is it more convenient to have things separated into different windows in Cocoa? Is it because you can use NSWindowController to manage their lifecycle? Are people just used to using windows because pre-Core Animation you couldn't give views a CA layer? Any other reason/convenience I am missing?
To the future generations: I believe people did it this way because they often flip between windows with different sizes, and then it's just less hassle to have them separate.
Also if you are looking for a good implementation, these guys nailed it: https://github.com/mizage/Flip-Animation
What is the best way to create a numeric pad like the one Apple uses in the telephone app?
I would say just create an array of UIButton objects so that you can utilize UIControlStateSelected and the other button states by using different images for different states.
Another idea is to create something similar to that entire keypad in Photoshop, and then tile it into 12 images using http://www.mikelin.ca/blog/2010/06/iphone-splitting-image-into-tiles-for-faster-loading-with-imagemagick/
That would take some of the work out of get all the images to flow nicely together.
By the way, I just forgot about these until just a minute ago... they have some of the UI graphics from the iPhone and iPad in high res PSD file:
http://www.teehanlax.com/blog/2010/02/01/ipad-gui-psd/
and
http://www.teehanlax.com/blog/2010/08/12/iphone-4-gui-psd-retina-display/
and
http://www.teehanlax.com/blog/2010/06/14/iphone-gui-psd-v4/
I implemented a KeypadView, that is customizable via a delegate.
This github repository has the KeypadView and a delegate-implementation.
As I am still beginner in the field of iOS development I would appreciate, if you share your thoughts with me.