问题
I am facing a weird problem here.
For some reason I am disabling the animation during orientation change in my view controller using [UIView setAnimationsEnabled:NO];
But when the alert view is present and if I change the orientation then it is giving weird result.
The attached screen shot is when I change the orientation to landscape.
Please note: I am using standard UIAlertView
and it is default overlay which is shown when the alert view is present and there is no customisation involved here.
As per the documentation
If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.
So it should not affect the resizing of the default overlay. Is it a restriction in disabling animation !??
I am not understanding why I am getting like this. Could anyone please help in solving this.
回答1:
When you set [UIView setAnimationsEnabled:NO];
, UIAlertView
is not resizing it's Overlay View (I think it's a bug).
Optionally you can restrict orientation when alert view is on screen as following.
Create a BOOL
variable in .h file.
BOOL shouldRotate;
initialize it with YES
in viewDidload
.
And whenever you show alert at that time make shouldRotate = NO;
And implement UIAlertView
delegate as follows:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
shouldRotate = YES;
}
Hope will help you.
Edit: As you want both no animation and rotation with alert view
This is actually a hack but works,
alert
is an UIAlertView
's object declared in .h file.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) {
UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0];
imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0);
}
else{
UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0];
imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0);
}
}
回答2:
Another possibility to cope with this bug would be to dismiss the alert view programmatically before rotation and displaying a new one after rotation completed.
That would automatically work for any iOS device independent of screen size.
回答3:
This seems to be a bug in iOS6
and below and is fixed in iOS7
.
来源:https://stackoverflow.com/questions/16806816/orientation-without-animation-giving-weird-result-when-uialertview-is-present