I have a MapView in a xib that is connected to Outlet. I set the frame by code for the portrait and the landscape. The frame is correct but the output is wrong. Why?
This is my code in MapViewController.h:
@interface MapViewController : UIViewController <MKMapViewDelegate>{
}
@property (nonatomic, strong)UIImageView * imageView;
@property (nonatomic, strong)IBOutlet UIButton * buttonHome;
@property (nonatomic, strong)IBOutlet UIButton * buttonMap;
@property (nonatomic, strong)IBOutlet UIButton * buttonFavorites;
@property (nonatomic, strong)IBOutlet UILabel * labelTitle;
@property (nonatomic, strong)IBOutlet MKMapView *mapView;
and MapViewController.m
@implementation MapViewController
@synthesize imageView;
@synthesize buttonFavorites;
@synthesize buttonHome;
@synthesize buttonMap;
@synthesize labelTitle;
@synthesize mapView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
-(void) layoutPortrait {
self.imageView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bar_V.png"]];
self.imageView.frame= CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, 80);
self.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
self.labelTitle.frame =CGRectMake(14, 83, 121, 54);
self.buttonFavorites.frame= CGRectMake(109, 485, 33, 33);
self.buttonHome.frame =CGRectMake(14, 485, 33, 33);
self.buttonMap.frame=CGRectMake(61, 485, 33, 33);
self.mapView.frame = CGRectMake(0, 140, 320, 310);
}
-(void) layoutLandscape {
self. imageView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bar_O.png"]];
self.imageView.frame= CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y,self.view.bounds.size.width,70 );
self.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
self.labelTitle.frame =CGRectMake(20,72,140,48);
self.buttonFavorites.frame= CGRectMake(107,237,33,33);
self.buttonHome.frame =CGRectMake(11,237,33,33);
self.buttonMap.frame=CGRectMake(59,237,33,33);
self.mapView.frame = CGRectMake(201,65,367,227);
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIInterfaceOrientation deviceOrientation= self.interfaceOrientation;
if(deviceOrientation == UIInterfaceOrientationPortrait || deviceOrientation== UIInterfaceOrientationPortraitUpsideDown) {
[self layoutPortrait];
}
else if (deviceOrientation== UIInterfaceOrientationLandscapeRight){
[self layoutLandscape];
}
else if (deviceOrientation==UIInterfaceOrientationLandscapeLeft){
[self layoutLandscape];
}
[self.view addSubview:self.imageView];
[self.view addSubview:self.mapView];
[self.view addSubview:self.labelTitle];
[self.view addSubview:self.buttonHome];
[self.view addSubview:self.buttonMap];
[self.view addSubview:self.buttonFavorites];
self.mapView.delegate=self;
}
-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice]orientation];
if(self.imageView){
[self.imageView removeFromSuperview];
}
if(deviceOrientation == UIInterfaceOrientationPortrait || deviceOrientation== UIInterfaceOrientationPortraitUpsideDown) {
[self layoutPortrait];
}
else if (deviceOrientation== UIInterfaceOrientationLandscapeRight){
[self layoutLandscape];
}
else if (deviceOrientation==UIInterfaceOrientationLandscapeLeft){
[self layoutLandscape];
}
[self.view addSubview:self.mapView];
[self.view addSubview:self.labelTitle];
[self.view addSubview:self.imageView];
[self.view addSubview:self.buttonFavorites];
[self.view addSubview:self.buttonHome];
[self.view addSubview:self.buttonMap];
}
What am I doing wrong?
A couple of things:
1) Do you have auto-size on your
MKMapViewon the xib file? That could interfere to what you are doing on code.2) You should handle rotation logic in the correct place and not in
viewDidLoad. On the UIViewController Class reference, check the part Handling View Rotations, so you can see where to put your code.