Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Doctor w-rw-rw-
Jun 24, 2008
Apologies in advance if my tone sucks; I've had a horrible day.

lord funk posted:

You are insightful as always w-rw-rw-.
Would you believe that I constantly struggle to believe I'm actually decent at this? I learned most of the poo poo above in around a day and I still can't bring myself to feel like I don't suck. Bah.

lord funk posted:

I finally got a chance to play around with things.

Part 1: I was using a single UIImageView, with its animationImages array set to the array of 300 UIImages loaded with +imageNamed:. I thought I might try using +imageWithContentsOfFile: to avoid the backing cache, but that didn't help. It still takes the same huge of memory as soon as you drop the image view into the frame.
Are your images about 100x100? if so, that sounds about right. I hadn't heard of animationImages until now, but a sensible optimization on it to run animations smoothly would be to decode the images inside.

Napkin calculation: sqrt(100 * 1024 * 1024 / 300 / 32) is approximately 100.

Your memory fail comes from the fact that you're switching between a poo poo ton of bitmaps - the size of which is roughly their actual number of pixels times the number of bytes per pixel.

lord funk posted:

Part 2: I switched to a generic UIView, where I run a CADisplayLink timer that sets the layer.contents to the next CGImageRef in sequence. If I store the images into an array, the memory starts out at zero but builds up to the same amount as earlier:

(Part 2):
Objective-C code:
- (void)updateAnimation {
    static int counter = 0;
    self.layer.contents = (id)self.images[counter];
    counter = (counter + 1) % self.images.count;
}
So basically, the amount of memory you use approaches the amount of memory necessary to hold 300 decoded images of a particular size at the same time.

lord funk posted:

Part 3: Since keeping the memory down is my primary goal, I loaded the image data (as NSData) into an array, and I create the image ref each frame, then release it immediately. It definitely takes some CPU to do this, but I could make a buffer to load maybe 30 frames at a time as a tradeoff.

(Part 3):
Objective-C code:
- (void)updateAnimation {
    static int counter = 0;
    
    CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((CFDataRef)self.imageData[counter]);
    CGImageRef image = CGImageCreateWithPNGDataProvider(imgDataProvider,
                                                        NULL,
                                                        NO,
                                                        kCGRenderingIntentDefault);
    
    self.layer.contents = (__bridge_transfer id)image;
    CFRelease(imgDataProvider);

    counter = (counter + 1) % self.imageData.count;
}
I would bet money on the possibility that your CPU hit is one of the loading file or PNG->bitmap decoding steps.

lord funk posted:

If I have a question it's for clarification here. I'm seeing that setting a layer's contents to a CGImage does take memory. Am I not doing it correctly?
To clarify, a UIView with a custom CALayer class specified by layerClass doesn't waste any memory allocating its own backing store and just uses the CALayer subclass (as opposed to it usually allocating a more typical CALayer to back it, which gets subviews with their own backing sublayers when you add subviews). Setting the contents replaces the backing store with the CGImage.

This page might be partially enlightening:: http://sean.voisen.org/blog/2013/04/high-performance-image-loading-os-x/ - it might be possible to decode CGImages on a background thread if you're committed to loving your CPU and by extension, your battery.

But basically, if you want the sweet animation, you can totally do it in a performant, low-memory, low-CPU fashion. You just need to reduce your images to as few as possible, or even draw and save them in code, then animate them with Core Animation.

Swapping hundreds of different images from your app to the CPU and crossing into the GPU, fast, *must* by necessity, gently caress you on CPU or memory.

Doctor w-rw-rw- fucked around with this message at 06:03 on Aug 29, 2013

Adbot
ADBOT LOVES YOU

Doctor w-rw-rw-
Jun 24, 2008
To add on to his, as a separate post because it deserves special attention:

The key to performant visuals on mobile (and maybe even generally) is to avoid copying memory.

Remember that your images go from being compressed files on disk to being loaded into memory (possibly streamed in and evicted as small chunks as a part of decoding), then decoded into a bitmap (definitely all in memory), then *copied to video memory*. Telling the display server to have the GPU map a texture with a different rotation (setting the transform does this for you) is vastly, vastly more performant than loading a new image. The former is basically zero CPU and memory, with a fixed and pretty much expected GPU cost. The latter falls flat from a GPU efficiency standpoint no matter what you do, and fails hard on either CPU or memory even if you try to be smart about it.

So yeah, you can totally animate that in code. Are you going to eke any substantial performance or memory wins out of trying it with 300 images instead? The answer isn't just no, but gently caress no.

Froist
Jun 6, 2004

Doctor w-rw-rw- posted:

The key to performant visuals on mobile (and maybe even generally) is to avoid copying memory.

This all makes perfect sense to me, and not to be arrogant, I knew this already. But on this basis why do Apple themselves appear to animate large parts of the iOS UI with huge series' of pngs?

There was a tool I used once which ripped through the iOS frameworks on your machine and dumped out every image it came across, which revealed things like (the one example that sticks in my head) the Siri purple microphone animation being made up of 100 different pngs for each percentage level of volume input. Sure, the existence of these images doesn't mean they're definitely doing this, but it seems a strong indication to me. In this specific case maybe the purple glow would be more expensive to calculate/render at runtime, but the knock-on effect of loading all these images instead seems pretty extreme. Again, this wasn't the only example of this kind of thing, just the only one I can remember at 6am..

Doctor w-rw-rw-
Jun 24, 2008

Froist posted:

This all makes perfect sense to me, and not to be arrogant, I knew this already. But on this basis why do Apple themselves appear to animate large parts of the iOS UI with huge series' of pngs?
Good to hear that you knew it already. In my experience, many developers often don't think about those things.

Just take a look at <redacted> and it's blatantly clear that performance is no longer necessarily their strong suit. I'm not certain the extent to which I am able to expand on that. In any case, you shouldn't hold Apple up as a paragon of iOS app programming. The hardware is good enough that they don't need the best people pushing performance to the limits anymore. They also have a history of turning visual effects off on older hardware. The 4S had a big jump in fill rate over the 4, if memory serves.

And yup, that Siri bit does sound pretty lazy.

To clarify my earlier notes, it's not just using tons of images that is bad performance. Loading and using images can be unnoticeable if you're not overwhelming memory, and managing it well. It's obviously the right thing to do in many cases. But if whatever you're doing involves animation and pushing new bits (or drawing) from the app into some sort of graphics context (CALayer, Core Graphics, OpenGL, whatever), you're probably using a fair amount of effort just for the trip from storage->CPU->GPU.

Froist
Jun 6, 2004

Yeah, it's all about avoiding the memory copy. I used to work in performance for a different handset manufacturer/OS, and seeing this made me wonder whether Apple had a magic solution. Guess not.

Just to be clear it's not me that asked the original question, I was just hijacking the discussion :)

Simulated
Sep 28, 2001
Lowtax giveth, and Lowtax taketh away.
College Slice
That does sound extra lazy, since that specific animation could obviously be drawn in code quickly (just set the layer's shadow radius and color), or if you had to use images could be handled with end images and one middle image repeated to fill.


For the original question, I agree that if you can get at the source of the animation, it does appear to be a bunch of circles rotating on various orbits. It could be drawn in code if you were really serious about the performance aspect. Unfortunately I don't think DrawCode does animations, but in theory you could have an Illustrator plugin that exported as CoreGraphics calls, or maybe some translator from a vector animation format (not that I know if one exists).

lord funk
Feb 16, 2004

I am surprised at the Siri animation. For certain animations you save tons of time if you programmatically draw it (especially when you decide you want to change that shade of purple...).

My particular animation could be approximated with a few simple shapes and drawn programmatically, but a) I like that it captures all the detail of the actual performance it came from b) I don't want to spend a week re-coding the OpenGL drawing code / relationships to make the same animation and c) it's really the only thing going on in its view, so I'm not battling with other processes.

Then there's this alternate animation which has three versions masked inside a folder so they bubble out:



So you're all totally right: best practice for memory / CPU / battery it should be drawn in-app. I'll be sacrificing one (probably CPU to be nice to other apps - it's what this app is all about) because I'm lazy.

Side note: took me about 9 hours to capture that animation. Had to write automated touch generation code for my performance screen, render and capture, shrink and animate... repeat because I didn't like a detail...

lord funk
Feb 16, 2004

Doctor w-rw-rw- posted:

I would bet money on the possibility that your CPU hit is one of the loading file or PNG->bitmap decoding steps.

Oh yeah it's totally the PNG->bitmap step. It's a really clear example that you get performance at the cost of [ ]CPU [ ]Memory <--pick one

Sinestro
Oct 31, 2010

The perfect day needs the perfect set of wheels.

lord funk posted:

It's a really clear example that you get performance at the cost of [ ]CPU [ ]Memory <--pick one

That's incorrect, sometimes it's both.

Doctor w-rw-rw-
Jun 24, 2008

lord funk posted:

I am surprised at the Siri animation. For certain animations you save tons of time if you programmatically draw it (especially when you decide you want to change that shade of purple...).

My particular animation could be approximated with a few simple shapes and drawn programmatically, but a) I like that it captures all the detail of the actual performance it came from b) I don't want to spend a week re-coding the OpenGL drawing code / relationships to make the same animation and c) it's really the only thing going on in its view, so I'm not battling with other processes.

Then there's this alternate animation which has three versions masked inside a folder so they bubble out:



So you're all totally right: best practice for memory / CPU / battery it should be drawn in-app. I'll be sacrificing one (probably CPU to be nice to other apps - it's what this app is all about) because I'm lazy.

Side note: took me about 9 hours to capture that animation. Had to write automated touch generation code for my performance screen, render and capture, shrink and animate... repeat because I didn't like a detail...

Believe me, Core Animation is a lot simpler than you'd guess. If you can write a KVC-compliant property that modifies the relevant transform/bounds/position, you can just write a CABasicAnimation to tween a start and end value for you. At the very least, I would suggest trying a simple animation group to get a feel for it. No need to stray anywhere near icky low-level OpenGL code there.


BTW, maybe you can help me with something. I want to take a CGImage, load it into a FBO, run a shader on it for a disc blur, (additional reference: CIDiscBlur - it's basically a blur where a pixel blows up into a circle - like the film effect where you go out of focus and lights turn into circles), then render that back into a CGImage. I'm clueless on everything there that involves OpenGL (ES2 of course). Do you think you'd have anything helpful to offer here?

lord funk
Feb 16, 2004

Doctor w-rw-rw- posted:

Believe me, Core Animation is a lot simpler than you'd guess. If you can write a KVC-compliant property that modifies the relevant transform/bounds/position, you can just write a CABasicAnimation to tween a start and end value for you. At the very least, I would suggest trying a simple animation group to get a feel for it. No need to stray anywhere near icky low-level OpenGL code there.
Totally with you, just not willing to spend the time on it now. I have another view I have to do where I need a specific, live-generated snapshot of the performance view. Ideally I'd like to use my existing GLKView, but there are issues with that (transparency, for one). I'm trying to keep the number of ways I'm drawing the same thing down.

quote:

BTW, maybe you can help me with something. I want to take a CGImage, load it into a FBO, run a shader on it for a disc blur, (additional reference: CIDiscBlur - it's basically a blur where a pixel blows up into a circle - like the film effect where you go out of focus and lights turn into circles), then render that back into a CGImage. I'm clueless on everything there that involves OpenGL (ES2 of course). Do you think you'd have anything helpful to offer here?

I might have something helpful in the form of someone else's work: GPUImage

https://github.com/BradLarson/GPUImage

I saw this demonstrated a week ago, and it's a huge bank of filters and supposedly cuts waaaay down on the boilerplate backend code.

Juul-Whip
Mar 10, 2008

Does anyone know about using iRate in iOS 7? It seems like the URL we used for app ratings in ios 6 doesn't work anymore in 7.

Juul-Whip fucked around with this message at 00:07 on Aug 30, 2013

ultramiraculous
Nov 12, 2003

"No..."
Grimey Drawer

Doctor w-rw-rw- posted:

BTW, maybe you can help me with something. I want to take a CGImage, load it into a FBO, run a shader on it for a disc blur, (additional reference: CIDiscBlur - it's basically a blur where a pixel blows up into a circle - like the film effect where you go out of focus and lights turn into circles), then render that back into a CGImage. I'm clueless on everything there that involves OpenGL (ES2 of course). Do you think you'd have anything helpful to offer here?

GPUImage is probably the way to go for this. The big thing is I'd skip the intermediate step of turning it into a CGImage again and have the filter output to a GPUImageView directly. My only caution would be that GPUImage's development definitely tends toward the camera-filter usage, rather than filtering static images. There have been changes before that break the static stuff unintentionally (though not in a while AFAIK). GPUImage is super super nice for avoiding dealing with OpenGL and getting right to using a shader.

If you need the CGImage for some reason, like you're going to save the output or do something else CPU-based with it, you might be best off using the Accelerate framework's vImage convolutions to do a blur (just look up a Gaussian kernel or something). Both GPUImage and CoreImage will give you overhead copying CGImages into FBOs and FBOs into CGImages. I can't find my benchmarks from a while back, but we were processing and saving the output to disk, and on a 4S a simple 3*3 blur was slightly faster than GPUImage and in-place color matrix recoloring was like 20% faster.

Also, regardless, disc blur is probably a Poisson blur, which is something you don't want in any interactive code because it is slooooowww.

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

lord funk posted:

I might have something helpful in the form of someone else's work: GPUImage

https://github.com/BradLarson/GPUImage

I saw this demonstrated a week ago, and it's a huge bank of filters and supposedly cuts waaaay down on the boilerplate backend code.

I just used this in an app I started on, and it's easy to use and really fast. I'm jut using it to darken and blur a user selected image, but it was 6 lines of code to do it. Good stuff.

Doctor w-rw-rw-
Jun 24, 2008
Hmm, nope. My goal isn't to slot in a library and transform an image, it's to write a shader. And the one thing I want to do right now is take a CGImage as input it, apply a special blur with OpenGL, then take the output.

unixbeard
Dec 29, 2004

It's pretty bread and butter with OpenGL but there are a lot of moving parts to get a handle on before you can do that. There is a book "iPhone 3D Programming" by Philip Rideout/Oreilly which can help get you up to speed. It's a great book and one of the most enjoyable programming books I have read in years.

In a nutshell, you would create an fbo, load you image into a gl texture, pass that to a shader as a uniform texture (using sampler2D) which renders to the fbo, then use the fbo texture as your processed image. It is straight forward enough but opengl and shaders require a bit of time to get familiar with.

LP0 ON FIRE
Jan 25, 2006

beep boop
Has anyone used FMOD Studio for iOS? Looks really amazing for organizing audio events and setting different properties like pitch randomization, wet/dry levels and priority. I was considering using it, but I don't know if it would be overkill for a 2D adventure game. There's lots of sprites hoping around, doing things, doors opening collecting things, etc, and I can see where it would be helpful especially for creating some kind of ceiling for maximum audio events and priority.

Couldn't find videos on their site, but here's one if anyone's curious:

https://www.youtube.com/watch?v=vr6pCpV9mO8

LP0 ON FIRE fucked around with this message at 03:08 on Aug 30, 2013

lord funk
Feb 16, 2004

Doctor w-rw-rw- posted:

Hmm, nope. My goal isn't to slot in a library and transform an image, it's to write a shader. And the one thing I want to do right now is take a CGImage as input it, apply a special blur with OpenGL, then take the output.

Why not fire up the OpenGL Game template and modify what's already there? It's got the shader there and ready to go.

NoDamage
Dec 2, 2000
Just curious if anyone has run into performance problems using autolayout for UICollectionViewCells (or UITableViewCells, for that matter)? Wondering if I should do the layout by hand instead.

Doc Block
Apr 15, 2003
Fun Shoe

Doctor w-rw-rw- posted:

Hmm, nope. My goal isn't to slot in a library and transform an image, it's to write a shader. And the one thing I want to do right now is take a CGImage as input it, apply a special blur with OpenGL, then take the output.

You can write your own shaders for use with GPUImage, IIRC.

lord funk
Feb 16, 2004

NoDamage posted:

Just curious if anyone has run into performance problems using autolayout for UICollectionViewCells (or UITableViewCells, for that matter)? Wondering if I should do the layout by hand instead.

Have you used Time Profiler to make sure it's an autolayout issue? Maybe too many resources are being loaded, or it could be something completely different.

Superschaf
May 20, 2010

Is there a way to skin NSMenu?

We have a nice look going in OpenEmu, but our implementation basically replicates the standard functionality really badly and the code is super ugly and requires a couple hacks.

admiraldennis
Jul 22, 2003

I am the stone that builder refused
I am the visual
The inspiration
That made lady sing the blues
I need to learn Objective-C & iOS development really fast so I can hit the ground running (and lead a team) on a major project. Hooray startups and rapidly changing things!

I'm a strong generalist programmer and definitely don't need intro to OO concepts or pointers or anything like that. Most immediately I've been doing Android development.

What's a good place to learn the stuff I need (Objective-C, frameworks, design patterns) ASAP? Are Apple's docs the best for an "expert-level" overview? Any solid books?

edit: the product is basically an application-as-an-SDK, there is a huge focus on UI/UX, and there will be lots of animations and network calls.

admiraldennis fucked around with this message at 12:28 on Sep 1, 2013

Hughlander
May 11, 2005

admiraldennis posted:

I need to learn Objective-C & iOS development really fast so I can hit the ground running (and lead a team) on a major project. Hooray startups and rapidly changing things!

I'm a strong generalist programmer and definitely don't need intro to OO concepts or pointers or anything like that. Most immediately I've been doing Android development.

What's a good place to learn the stuff I need (Objective-C, frameworks, design patterns) ASAP? Are Apple's docs the best for an "expert-level" overview? Any solid books?

edit: the product is basically an application-as-an-SDK, there is a huge focus on UI/UX, and there will be lots of animations and network calls.

Objective-C:
Read the pdf http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf it's pre ARC but it will give you a grounding in where the language is coming from.

UI/UX frameworks:
There's definitely an 'Apple way' of doing things if you have the time hit iTunes U for the Stanford University lectures. Watch them at 1.5X speed. If you need a book, I don't have a good recommendation I'm afraid.

Doctor w-rw-rw-
Jun 24, 2008

admiraldennis posted:

I need to learn Objective-C & iOS development really fast so I can hit the ground running (and lead a team) on a major project. Hooray startups and rapidly changing things!

I'm a strong generalist programmer and definitely don't need intro to OO concepts or pointers or anything like that. Most immediately I've been doing Android development.

What's a good place to learn the stuff I need (Objective-C, frameworks, design patterns) ASAP? Are Apple's docs the best for an "expert-level" overview? Any solid books?

edit: the product is basically an application-as-an-SDK, there is a huge focus on UI/UX, and there will be lots of animations and network calls.
Write some UIViews with custom CALayer subclasses, play with AFNetworking (don't waste time on low level networking stuff for now if HTTP/HTTPS is good enough), write a simple uiviewcontroller which contains other uiviewcontrollers using containment. As a gateway to understanding memory management, know how autorelease works as deeply as possible. Skim https://github.com/toulouse/FourHundred for really basic core graphics drawing.

Read the docs for most of the rest - they're really well organized and will have a lot of really useful information. Skip books. They'll all suck or be outdated or just show you how to make vanilla user interfaces, which you can learn yourself.

PM me with your IM information, or I guess we could set up an IRC channel so you can spam someone who knows more than you with questions. That's how I learned - spamming my friend at Apple with requests for more information.

Fate Accomplice
Nov 30, 2006




Doctor w-rw-rw- posted:

PM me with your IM information, or I guess we could set up an IRC channel so you can spam someone who knows more than you with questions. That's how I learned - spamming my friend at Apple with requests for more information.

I would kill for an ios focused IRC channel. I don't have PMs, but if you set it up, please post here.

pokeyman
Nov 26, 2006

That elephant ate my entire platoon.

Malloreon posted:

I would kill for an ios focused IRC channel. I don't have PMs, but if you set it up, please post here.

I'm in. I've never really used IRC so y'all can school me.

lord funk
Feb 16, 2004

I've got an iPad 3rd gen. running at 60fps, and an iPad 4th gen. running at 29fps. :wtc:

It has to have something to do with the iOS 7 blur effect being active on the 4th gen and not the 3rd gen. Uuugghhh feel like I'm wasting time tracking this down.

admiraldennis
Jul 22, 2003

I am the stone that builder refused
I am the visual
The inspiration
That made lady sing the blues

Doctor w-rw-rw- posted:

Write some UIViews with custom CALayer subclasses, play with AFNetworking (don't waste time on low level networking stuff for now if HTTP/HTTPS is good enough), write a simple uiviewcontroller which contains other uiviewcontrollers using containment. As a gateway to understanding memory management, know how autorelease works as deeply as possible. Skim https://github.com/toulouse/FourHundred for really basic core graphics drawing.

Read the docs for most of the rest - they're really well organized and will have a lot of really useful information. Skip books. They'll all suck or be outdated or just show you how to make vanilla user interfaces, which you can learn yourself.

PM me with your IM information, or I guess we could set up an IRC channel so you can spam someone who knows more than you with questions. That's how I learned - spamming my friend at Apple with requests for more information.

Great info, thanks for this.

I'll definitely be hitting you up soon with nagging questions.

Doctor w-rw-rw-
Jun 24, 2008

admiraldennis posted:

Great info, thanks for this.

I'll definitely be hitting you up soon with nagging questions.

Sure. I haven't set up any irc channel because I wouldn't idle in one until the work week starts.

NoDamage
Dec 2, 2000

lord funk posted:

Have you used Time Profiler to make sure it's an autolayout issue? Maybe too many resources are being loaded, or it could be something completely different.
Yeah. Sadly I was getting big spikes in CPU activity whenever [UICollectionView performBatchUpdates:] was called and it seemed to be getting stuck in the autolayout engine. For now I've removed autolayout from my cells and performance has increased quite a bit.

Fate Accomplice
Nov 30, 2006




I've just created #appledevgoons on synirc. server is irc.synirc.net

Doctor w-rw-rw-
Jun 24, 2008

NoDamage posted:

Yeah. Sadly I was getting big spikes in CPU activity whenever [UICollectionView performBatchUpdates:] was called and it seemed to be getting stuck in the autolayout engine. For now I've removed autolayout from my cells and performance has increased quite a bit.

Check that you've implemented isequal on the layouts, I think. They added a property in iOS 7 that contains an object whose default isEqual tests for referential equality. I don't really know the details myself, as I haven't run into it, but I've heard that was a thing.

Doctor w-rw-rw- fucked around with this message at 00:50 on Sep 3, 2013

NoDamage
Dec 2, 2000

Doctor w-rw-rw- posted:

Check that you've implemented isequal on the layouts, I think. They added a property in iOS 7 that contains an object whose default isEqual tests for referential equality. I don't really know the details myself, as I haven't run into it, but I've heard that was a thing.
I don't understand what you're saying here. Are you referring to NSLayoutConstraint, UICollectionViewLayout, or something else entirely? I don't see where isEqual fits into any of that...

Doctor w-rw-rw-
Jun 24, 2008

NoDamage posted:

I don't understand what you're saying here. Are you referring to NSLayoutConstraint, UICollectionViewLayout, or something else entirely? I don't see where isEqual fits into any of that...

Ah, just looked it up. In iOS 7, UICollectionViews don't call applyLayoutAttributes on custom UICollectionViewCells if the layout attributes haven't changed, and checks with isEqual. Probably not your issue, albeit a potential pitfall.

Sorry I'm off my rocker today, haven't been myself today.

haveblue
Aug 15, 2005



Toilet Rascal
Is there a way to have a UITableView immediately select its cells upon touch begin and cancel them on scroll, rather than wait until touch end as it normally does? It appears to ignore the delaysContentTouches flag from UIScrollView.

NoDamage
Dec 2, 2000

Doctor w-rw-rw- posted:

Ah, just looked it up. In iOS 7, UICollectionViews don't call applyLayoutAttributes on custom UICollectionViewCells if the layout attributes haven't changed, and checks with isEqual. Probably not your issue, albeit a potential pitfall.

Sorry I'm off my rocker today, haven't been myself today.
Ah, gotcha. I assume this is only a problem if you have created a subclass of UICollectionViewLayoutAttributes (which I haven't). I'll keep it in mind though cause it sounds like something I'll eventually run into.

Axiem
Oct 19, 2005

I want to leave my mind blank, but I'm terrified of what will happen if I do

Malloreon posted:

I've just created #appledevgoons on synirc. server is irc.synirc.net

It might be worth adding this info to the OP.

pokeyman
Nov 26, 2006

That elephant ate my entire platoon.

Axiem posted:

It might be worth adding this info to the OP.

Beat you by over an hour!

Adbot
ADBOT LOVES YOU

PT6A
Jan 5, 2006

Public school teachers are callous dictators who won't lift a finger to stop children from peeing in my plane
Is there a reason why iOS REDACTED UIDatePickers go over the bounds they display in Interface Builder (and start slightly lower than they display)? I'd hope by preview 6, that sort of thing would be sorted.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply