Imageview not display Proper For Iphone 5 Retina - iphone

I am developing one app in that app display 20 array Images to Image view Scroll horizontally.
give scroll view to that imageview like this
scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
for (m = 0; m <=19; m++)
{
rnd = arc4random_uniform(arr.count);
NSString *imageName=[FrontsCards objectAtIndex:rnd];
fullImageName=[NSString stringWithFormat:#"%#",imageName];
int padding=0;
CGRect imageViewFrame=CGRectMake(scrollView.frame.size.width*m+padding, scrollView.frame.origin.y, scrollView.frame.size.width-2*padding, scrollView.frame.size.height);
ImgView=[[UIImageView alloc]initWithFrame:imageViewFrame];
[ImgView setImage:[UIImage imageNamed:fullImageName]];
[scrollView addSubview:ImgView];
}
this imageview not display images Properly for iphone 5 simulator. below black edge add.
how may i solve that issue.how to remove that black edge.how to fit that image to Iphone 5 simulator.
how may manage my ImageView to Iphone 4 or Iphone 5.

Iphone 5 size is 568 and Iphone 4 size is 480.
scrollView=[[UIScrollView alloc]init];
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
// For Iphone5
scrollView.frame = CGRectMake(0, 0, 320, 568)
}
else if ([[UIScreen mainScreen] bounds].size.height == 480)
{
//For Iphone 4 or others
scrollView.frame = CGCGRectMake(0, 0, 320, 480)
}
this will really helpful to you.

Iphone 5 screen size is 568 and you have had codded height to 480. So it is not working for iphone5.
DO following
scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, [[UIScreen mainScreen] bounds].size.height)];
Depending on devise scroll view height will change.

Try This
scrollView=[[UIScrollView alloc]init];
if ([[UIScreen mainScreen] bounds].size.height == 568) scrollView.frame = CGRectMake(0, 0, 320, 568)
else if ([[UIScreen mainScreen] bounds].size.height == 480) scrollView.frame = CGRectMake(0, 0, 320, 480)
So, it will help you to fill scrollview in iPhone-5 screen too.
Hopefully, it'll work for you.
Thanks.

scrollView=[[UIScrollView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
use this to make the UIScrollView dynamic

Use macro to check whether it is iPhone 5 or not.
#define IS_IPHONE ( [[[UIDevice currentDevice] model] isEqualToString:#"iPhone"] | [[[UIDevice currentDevice] model] isEqualToString:#"iPhone Simulator"])
#define IS_HEIGHT_GTE_568 [[UIScreen mainScreen ] bounds].size.height >= 568.0f
#define IS_IPHONE_5 ( IS_IPHONE && IS_HEIGHT_GTE_568 )
scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, IS_IPHONE_5?568:480)];

You need to create design for iPhone 4 and iPhone 5.
Create a class which make decision which iPhone is connected and
make function on it which accept CGRect and return required size of CGRect
you can get device size by
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if (result.height < 500)
{
currentDeviceHeight=460;
//You can use use iPhone 4 image
}
else
{
currentDeviceHeight=548;
// here you can use iPhone 5 image
}
}
else
{
// iPad
}

Related

Display an App correctly on 3.5" and 4" screen

I almost finished to develop my App. Now I am trying to make it look nice in both iPhone 4 and 5.
I am trying to get the height of my scren but the following method doesn't work.
Any idea?
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
if (screenSize.height == 1136) {
NSLog(#"iphone 5");
}else if(screenSize.height == 960){
NSLog(#"iphone 4 retina");
}else{
NSLog(#"iphone 4 non retina");
}
this is the complete viewWillAppear method:
-(void)viewWillAppear:(BOOL)animated
{
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
NSLog(#"%#",NSStringFromCGSize(screenSize));
if (screenSize.height == 568.0f) {
NSLog(#"iphone 5");
}else if(screenSize.height == 480.0f){
NSLog(#"iphone 4 retina");
}else{
NSLog(#"iphone 4 non retina");
}
[firstStepsButton.titleLabel setHidden:YES];
[workingButton.titleLabel setHidden:YES];
[accommodationButton.titleLabel setHidden:YES];
[universityButton.titleLabel setHidden:YES];
[meetMeButton.titleLabel setHidden:YES];
[improveYourselfButton.titleLabel setHidden:YES];
self.navigationController.navigationBarHidden = TRUE;
// self.view.backgroundColor = [UIColor colorWithRed:2/255.0f green:42/255.0f blue:97/255.0f alpha:1.0f];
[super viewWillAppear:animated];
}
It wouldn't because the screen's coordinate system is in points, not pixels. Try it like this:
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
NSLog(#"%#",NSStringFromCGSize(screenSize));
if (screenSize.height == 568.0f) {
NSLog(#"iphone 5");
}else if(screenSize.height == 480.0f){
NSLog(#"iphone 4 retina");
}else{
NSLog(#"iphone 4 non retina");
}
You should also consider using UIDevice's userInterfaceIdiom to check whether the device is iPhone/iPad, and UIScreen's scale to determine whether the device is retina or not.
Consider downloading Xcode 5 DP where they fixed management of Autolayout in Interface Builder. It is now really easy to set and manage constraints. Try it out.

iPhone 5 Optimization

I use this code in "viewDidLoad" to check if app is running on iPhone 5 or regular iPhone.
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
// iPhone Classic
[_backgr setImage:[UIImage imageNamed:#"usefull_i4.png"]];
[scrollView setFrame:CGRectMake(16, 69, 291, 349)];
[_backgr setFrame:CGRectMake(0, 0, 320, 480)];
}
if(result.height == 568)
{
// iPhone 5
[_backgr setImage:[UIImage imageNamed:#"usefull_i5.png"]];
[scrollView setFrame:CGRectMake(15, 111, 295, 349)];
[_backgr setFrame:CGRectMake(0, 0, 320, 568)];
}
}
It doesn't work. :( Only if I change !here from iPhone 3.5 to iPhone 4, this code work. 1
Also I use this code for another ViewController and works great.. I don't use Autolayout.
Try this macro : (in .pch file)
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
Example :
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
if(IS_IPHONE_5)
{
// code
}
}

finding difference iphone 4s and 5 working wrongly

configh.h
#define IS_IPHONE5 [[UIScreen mainScreen] bounds].size.height == 568
homeViewController.m
- ( void ) phoneType{
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 568){
NSLog(#"iPhone 5");
homeImg.image = [UIImage imageNamed:#"Background-Home.fw.png"];
loginImg.image=[UIImage imageNamed:#"Background.fw.png"];
}
else{
NSLog(#"iPhone 4S");
homeImg.image = [UIImage imageNamed:#"Background-Home.png"];
loginImg.image=[UIImage imageNamed:#"Background.png"];
}
}
This is the way iphone 4s and 5 i find difference.When i execute this code on iphone 5 log iphone 4s printed.how do i change my code to get execute correctly
You can try this for the same:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
// iPhone Classic
}
if(result.height == 568)
{
// iPhone 5
}
}
This only works if you have at least added a Default-568h#2x.png launch image to your application. Else this will always return false. (Because the screen will be letterboxed if you don't have the launch image)
Also you might want to change the iPhone 5 check to
bool isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom]
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height *
[[UIScreen mainScreen] scale]) >= 1136));
Because of floating point issues with == and !=
The ultimate rule of math in C: never use == and != with floating-point numbers. They don't work as you would expect it. Instead of checking it to be a specific value, check for being less or more than an intermediate value:
IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height > 500)
Also, it's advisable to always parenthesize your macros.

Issues with migrating my app to iphone5 resolution

I am trying to migrate my app for iphone 5. I have already seen the other questions in stackoverflow and still facing the some problems in correctly showing it.
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
// code for 4-inch screen
_backgroundimageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,500)];
[_backgroundimageView setImage:[UIImage imageNamed:#"image1-568h#2x.png"]];
} else {
// code for 3.5-inch screen
[_backgroundimageView setImage:[UIImage imageNamed:#"image1.png"]];
}
The size I have set for backgroundimageView is 320 x370 in the size inspector and the image size of image1-568h#2x.png has a size of 640x 1136 and of image1.png is 640x733.So, for 3.5 inch screen, it should show normally and for 4-inch screen, it should resize accordingly.
But the problem is that for 4-inch screen, it doesn't resize and ends up showing me the same as 3inch screen with some white border to cover the remaining area.
Need some guidance to solve it. Thanks.. Can point out the mistake i am doing...
Why you are again allocating backgroundimageView for iPhone 5 resolutions. Just use the same IBOutlet of backgroundimageView and modify the frame and image of it.
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
// code for 4-inch screen
_backgroundimageView.frame = CGRectMake(0,0,320,460);
[_backgroundimageView setImage:[UIImage imageNamed:#"image1-568h#2x.png"]];
} else {
// code for 3.5-inch screen
_backgroundimageView.frame =CGRectMake(0,0,320,370);
[_backgroundimageView setImage:[UIImage imageNamed:#"image1.png"]];
}
Default image name must be "Default-568h#2x.png" (not image1-568h#2x.png) try renaming the default image name and check again, you will get right screen size.
Also you can check iphone5 by macros.
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
I think content mode of your imageview is center so try this for your imageview
[_backgroundimageView setContentMode:UIViewContentModeScaleAspectFill]

iPhone simulator does not show iphone 5 compatible image

I have long across many questions and answer regarding element settings for old and new iphone screens and got some idea as well. I have a query...I am preparing an app for iphone 320X480(iPhone), iphone retina 3.5 inch and 4 inch retina screens. For an instance of window (background) which I want to set programatically. It has to with a titlebar. so what I have done so far checked the screen size with
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"Do-568h#2x.png"]];
[self.view addSubview:backgroundImage];
[self.view sendSubviewToBack:backgroundImage];
} else {
UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"Do.png"]];
[self.view addSubview:backgroundImage];
[self.view sendSubviewToBack:backgroundImage];
}
First block would check for iphone 5 screen (I presume) and second would set screen for normal and retina both screen for which I put 320X480 px image name Do.png and 640X960 image name Do#2x.png. The iphone and iphone 3.5 (Retina) displays well on simulator however iphone 4 (Retina) which I presume will be equal to iPhone 5 does not displays correctly. Please let me know what should i do...and yes Do-568h#2x.png is 640X1136....
use the below method to set the size of screen
- (void)iPhoneDeviceScreenSetting {
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
// iPhone Classic
lowerImgVw.frame = CGRectMake(0, 395, 318, 40);
}
if(result.height == 568)
{
// iPhone 5
lowerImgVw.frame = CGRectMake(0, 480, 318, 40);
}
}
}