I have a problem that I just haven't been able to figure out. I have an app done that will take a picture from the front and one from the back camera, then merge them together.
The name of the app is GroupCam
However I have an issue in where my UIButtons will not be loaded as retina images from the start. If i set them as #2x on the interface builder they do appear in high quality but once I reload them programmatically the low versions will appear instead.
This is due to the fact that, after a picture is taken and the screen changes the button images change, but when the user presses the back button the camera icons will look horrible (because the low quality versions are being loaded).
Please check the following pictures:
First Screen: Only the upper right button appears distorted because I am checking the value of the camera flash and "loading" the corresponding image programatically.
Second Screen: The user has moved to another screen and came back to the first one, all buttons were reloaded and they now all look distorted.
Why is this happening?
Edit:
This is how I load the images.
[self.flashButton setImage:[UIImage imageNamed:#"flashOff"]
forState:UIControlStateNormal];
I read somewhere on the internet that doing this will automatically load the most suitable version of the image.
I also tried this but the result is the same:
[self.takeButton setImage:[UIImage imageNamed:#"takePhoto.png"] forState:UIControlStateNormal];
First off, its probably worth verifying that the low-res versions are actually being displayed. I had jumped to a similar assumption recently, swapped out the low-res version of the image with something different, and confirmed that the hi-res version was actually still being displayed, but was being distorted.
My actual problem, I had set
<uibutton_superview>.layer.shouldRasterize = YES;
If any of the buttons ancestors have this set, it could likely be your problem.
If your app is taking a picture from the front camera and one from the back camera and merging them together, then the device requires a front facing camera. All iOS devices which have front facing cameras also have retina display's (so long as your not developing for the iPad 2, but that's a different story) so you shouldn't really have to have normal images at all, so all your images should be retina images. If there are no normal images, then this issue shouldn't happen at all. Make a backup copy, and try deleting all the normal images, and then try. Because your using the UIImage imageNamed:#"ImageName", like you said, should automatically select the image! Good Luck!
The case of the filenames of the images does not matter on the simulator, but does on the device.
Use all consistent case. Image.png and image#2x.png are recognized and will work together in simulator but not on device. use image.png and image#2x.png. Or you can also use .jpg as long as case is matching.
Related
I have some issues with the launch screen images, when the app is started. I currently using the default image set that contains the #1,2,3x images, but I figured out that there is also an Launch Image Set. This will solve also the problem of different iPhone sizes with the export for multiple screen resolutions. But after uploaded the correct images to the launch image set, I can't select them within an UIImageView in the launch storyboard. Is this even possible and if so, how can I use that in storyboards? Or is there another way to do this?
I cycle through an x amount of images that will randomly display when opening the application. So every time you open the app, it will display another image.
You can't use launch images in the rest of your storyboards. You should create a normal image set to use in the rest of your app and use constraints to get it to adjust size to whatever device the app runs on.
The launch image is shown while your app is loading ("launched", loaded to memory). So you can not run any code at this time.
As the launch time is not that long, a common approach is to initially show a view, that looks 100% identical to the actual launch screen for 3 seconds or so. So you can do run code, animations or such there.
In my personal user experience this is an ugly approach, as you let the user wait for no reason but to show of you CI.
To sum it up: You can not have a random initial launch screen.
Find more information about how to actually setup a launch screen in this answer.
I use a Launch Screen (xib) in my app to overcome the problem of the resizeable screen, since i don't always want add Launchscreens everytime, Apple create a new iPhone with a different screen resolution.
In my launchscreen, i placed a UIImageView directly in the center of the view using constraints. The image shows the logo of the company i work for.
The problem is, that sometimes the image is being hidden (mostly after install and first launch) and sometimes it shows (mostly after a view times using it). I'm not quite sure, what the problem is. Is it because at the first-launch-time(s) it has to load many ressources?
Figured out the problem: It seems, that if there isn't enough disc space left on the device, it doesn't show the xib's (Launch-Screen's) Image. iOS at some point clears out some disc-space (i guess from NSLibraryDirectory) and than the images show again.
If this is a major problem to any of your apps, use Launch-Images instead.
The purpose of launch images is to fake that the app is starting to give time to the app to fully load but I have this app of mine that is so fast to load that the launch image just is visible for less than 0.1 seconds. I have tested the app without the launch image and it loads fast than with a launch image.
When I submit the app to Apple without the launch image it fails validation.
This is ridiculous. Is there a way to solve that?
thanks.
The general rule of thumb is to use a launch image that looks like the first screen of your app with text removed, so it looks like a blank slate of your interface. Once your app starts rendering, it will be obvious to the user that it's reached that point.
Many times games will have a splash screen, especially since they sometimes load resources during that time. So those will usually either have a launch image that is their splash screen, where once rendering it starts it makes some animation occur, or they will sometimes start with a black launch image because the logo/splash will fade in.
As you said, the app fails validation without the launch image. Also when Apple first came out with the iPhone 5, the way you added support for the iPhone 5 screen size was by adding a launch image at that size. So in that case Apple is actually using the presence of the launch image to determine if you support the screen size or not. In other words, you need launch images, and it does help with the user experience, even if it is only visible for a split second.
There is no way to solve it - you must have a launch image.
You could use a launch image that looks a lot like your first page, so it doesn't look so jarring when it briefly flashes up.
Last I checked when you don't have a launch image for a debug build iOS uses a default image. If I remember right it is black. So you could create an all black image and use that.
Ive personally never used a launch image and have gotten all of my apps approved. Maybe you're failing validation because of something else?
you do not need a launch image. This is not causing you to fail validation
iOS 6 SDK. Xcode 4.5.
Using storyboard and arc. I am making an application that consists of a number of calculators that compute various formulas. On one scene, I'm using 8 UIButtons that have a PNG file as a background image, and they are labelled as different formula categories to allow the user to navigate to 8 different formulas which are contained in 8 different scenes.
I'm using modal segues and am utilizing the [self.presenting dismissViewController] method to dismiss each scene. That all works fine.
On one calculator in particular, I've set up the scene to resemble an actual calculator. I used a UIImageView with a UILabel on top of it to act like a display. Even without code attached to it, when running on my device, I notice that the transition gets hung up when segueing to that scene. I'm not sure why. Also, whenever I hit a button I get a receives memory warning in the console. I'm also showing a leak in instruments.
This app works perfectly in the simulator but not on the actual phone. I'm not sure what's wrong. Could it be my compiler settings? Or is it the fact that I'm not programmatically setting up the button images? Even when there is just a UIImage with a blue picture PNG and a label on top of it, no buttons or a viewcontroller for this view, it still gets hung up.
I'd appreciate any tips or tutorials or just plain tell me what I'm doing wrong lol.
Thanks.
I found out what was wrong. I was using a very high resolution image on each of those buttons. When I replaced it with a low resolution image the memory issue went away
Does anyone know if the iPad has any limitations on the canvas tag?
Currently I'm working on a creative that uses a flipbook and audio tag combination to simulate inline video content. The animations are drawn to the canvas element and synced with the audio content being played. There are 4 short video clips that get played when someone clicks on the four buttons below.
http://cs.sandbox.millennialmedia.com/~tkirchner/rich/K/kungfupanda2_test/
The problem I'm having though is in iPad. After playing a few animations, mobile safari just suddenly crashes. It never happens when I play it on my iPhone but it happens every time on the iPad. Its not one particular animation either because if I click a different combination of buttons, the previous clip that it crashed on plays fine, and then it decides to crash on another clip.
I think the problem might have to do with the amount of memory Safari gives individual page views. I found a blog post that explains that problem pretty well.
http://roblaplaca.com/blog/2010/05/05/ipad-safari-image-limit-workaround/
According to that post, once mobile Safari reaches a particular threshold of memory, images begin to return blank. This is consistant with my finds so far. The iPad that I'm testing this all on is running iOS 3.2.1 (and before anyone tells me that I should just explain to my boss that nobody uses 3.X anymore, I tried... they still want me to investigate this). I borrowed a co-workers iPad running iOS 4.2.1 and that device didn't crash, but some of the images weren't being drawn to the canvas.
I'm pretty sure its a problem with the canvas tag too, because I tried experimenting with running the animation without drawing anything to the canvas element, and the page never crashed.
Thats why I think maybe its a limitation with Safari's support of the canvas tag. Of course, I'm open to anybody else's suggestions.
Feels kinda weird answering my own question again, buuuut I figured if anyone did a search on this kind of question, an answer would be helpful.
I believe my original hypothesis was correct. The total amount of images that the aniamtions were using was around 600+. I think the older iPad loaded as many as it could and then when it ran out of cache and the canvas tag was trying to draw images that weren't really there anymore, it crashed.
Eventually we ended up serving the ad to devices with iOS 4.2 and higher, since the problem didn't seem to occur on those newer devices. Plus, we compressed the image sizes further, so that helped reduce the amount of images we were storing into memory.
If anybody knows approximately what the cache threshold in iOS 4.2 or higher browsers are, I'd appreciate it if you commented. Just want to get an idea of how many KB of image data I can safely load.