It seems that if I create an NSImageView
in code, there is no way to have the image automatically scale proportionally up if the NSImageView
becomes bigger than the image itself. (an odd omission)
On the other hand, if I create the NSImageView
in IB, it seems to somehow attach an NSImageCell
to the NSImageView
and the NSImageCell
has an option to scale proportionally up and down, which is what I want.
But in IB, I can't seem to understand the relationship between the NSImageView
and the NSImageCell
. I can't delete the NSImageCell
from the NSImageView
and I don't see the connection in bindings or anywhere else.
How do I get the functionality of the NSImageCell
when creating the NSImageView
in code?
Sorry if this is obvious, but I'm used to UIImageViews
and they're definitely different than NSImageView
.
Thank you.
You should be able to scale up using [NSImageView setImageScaling:NSImageScaleProportionallyUpOrDown]
. Have you had trouble with that? You can also access the cell for any NSControl
using -cell
.
As for the separation of cells from controls (views), this is a hold-over from the days of much less powerful computers (some NeXT computers only had 8MB of memory). Cells provide a lighter-weight object that does not require some of the overhead of a full view. This is important in cases where a lot of elements might exist, such as in a matrix or a table. Cells are designed to be easier to copy and reuse, much like UITableViewCell
. Like UITableViewCell
, the same NSCell
may be used repeatedly to draw different content. Cells also share some singletons. For example, there is typically only one field editor (NSTextView
) shared by most cells. It just gets moved around as needed as the user selects different text fields to edit.
In a world where the first iPhone had 10x the memory of a NeXT and desktops commonly have 1000x the memory, some of the choices in NSCell
don't make as much sense. Since 10.7, OS X has moved some things away from NSCell
. NSTableView
now supports NSView
cells as well as NSCell
cells. When iPhoneOS was released, UITableView
got started on views from the beginning. (Of course an iPhone table view is minuscule compared to an OS X table view, so it was an easier choice for more reasons than just available memory.)
The reason you're confused is that the documentation on -[NSImageView setImageScaling:]
is wrong, where it lists the possible scaling choices. If you look up NSImageScaling
, you will find another choice NSImageScaleProportionallyUpOrDown
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With