2016-05-13 68 views
4

我的方式来定制UIView显示像我的iPad应用程序中的警报消息在iOS 8和更高版本中正常工作,但iOS 7视图仅在纵向模式下显示?在iOS 7中自定义UIView方向问题

我的iPad应用程序部署目标是iOS 7,设备方向仅为风景左侧和风景右侧。

的iOS 7屏幕:

enter image description here

iOS 8的屏幕:

enter image description here

我的代码是在这里ViewController.m

- (IBAction)submitBtnActiion:(id)sender 
{ 
    if (self.emailField.text.length == 0 || self.phoneNoField.text.length == 0 || self.passField.text.length == 0) { 

     QAlertView *alert = [[QAlertView alloc] 
      initWithAlertTitle:@"Message" 
        withMessage:@"Please ensure that all required fields are completed" 
        withContent:nil 
       withCancelButton:@"OK" 
       withOtherButton:nil]; 

     alert.delegate = self; 

     [alert showInWindow]; 

     return; 
    } 
} 

QAlertView.h

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@protocol QAlertDelegate <NSObject> 

- (void)QAlertView:(QAlertView *)alertView 
    clickedAtButtonIndex:(NSInteger)index; 

@end 

@protocol QAlertDelegate; 

@interface QAlertView : UIView 

@property(nonatomic) BOOL isAdjustKeyboardOnResign; 

@property(nonatomic) CGFloat adjustedValue; 

@property(nonatomic) NSString *message; 

@property(nonatomic, assign) id<QAlertDelegate> delegate; 

- (id)initWithAlertTitle:(NSString *)title 
      withMessage:(NSString *)message 
      withContent:(UIView *)contentView 
     withCancelButton:(NSString *)button 
     withOtherButton:(NSString *)otherButton; 
- (void)showInWindow; 

@end 

QAlertView.m提前

#import "QHeaders.h" 

@implementation QAlertView 
{ 
    UIView *messageView; 
} 
@synthesize isAdjustKeyboardOnResign; 

@synthesize adjustedValue; 

- (CGRect)getBounds { 

    [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 

    NSString *ver = [[UIDevice currentDevice] systemVersion]; 

    float ver_float = [ver floatValue]; 

    if (ver_float >= 8.0) { 
    return screenBounds; 
    } 

    CGFloat width = CGRectGetWidth(screenBounds); 

    CGFloat height = CGRectGetHeight(screenBounds); 

    UIInterfaceOrientation interfaceOrientation = 
     [UIApplication sharedApplication].statusBarOrientation; 

    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) { 
    screenBounds.size = CGSizeMake(width, height); 
    } else if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) { 
    screenBounds.size = CGSizeMake(height, width); 
    } 
    return screenBounds; 
} 

- (id)initWithAlertTitle:(NSString *)title 
      withMessage:(NSString *)message 
      withContent:(UIView *)contentView 
     withCancelButton:(NSString *)button 
     withOtherButton:(NSString *)otherButton { 

    _message = message; 

    bool temp = NO; 
    bool temp1 = NO; 

    if (self = [super initWithFrame:[self getBounds]]) { 
     self.backgroundColor = [UIColor blueColor]; 
    } 

    UIView *alerView = 
    [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 1024)]; 

    [alerView setBackgroundColor:[UIColor colorWithRed:(23/255.0) 
               green:(26/255.0) 
                blue:(31/255.0) 
               alpha:0.6]]; 

    [self addSubview:alerView]; 

    CGFloat adjustedHeight = ALERT_HEIGHT; 

    if (contentView) { 
     CGFloat actualHeight = contentView.frame.size.height; 

     adjustedHeight = actualHeight + (2 * BUTTON_HEIGHT); 


    } 

    if ([message isEqualToString:@"DisplayTableMapPopup"]) { 



     messageView = [[UIView alloc] 
         initWithFrame:CGRectMake(120,155,ALERT_WIDTH, adjustedHeight)]; 

     _message = @""; 

     message = @""; 

     temp = YES; 



    }else if ([message isEqualToString:@"TableSettingPopup"]){ 

     messageView = [[UIView alloc] 
         initWithFrame:CGRectMake(
               ((self.frame.size.width - 453)/2)+30, 
               ((self.frame.size.height - adjustedHeight)/2)+24, 
               453, 315)]; 

     _message = @""; 

     message = @""; 

     temp1 = YES; 


    }else{ 
     messageView = [[UIView alloc] 
          initWithFrame:CGRectMake(
                ((self.frame.size.width - ALERT_WIDTH)/2), 
                ([QNotifier sharedInstance].qAlertKeyboardDisplay == 
                YES) 
                ? ((self.frame.size.height - adjustedHeight)/2) - 
                115 
                : ((self.frame.size.height - adjustedHeight)/2), 
                ALERT_WIDTH, adjustedHeight)]; 
} 
[QNotifier sharedInstance].qAlertKeyboardDisplay = NO; 

    messageView.backgroundColor = [UIColor colorWithRed:235.0f/255.0f 
                green:235.0f/255.0f 
                blue:236.0f/255.0f 
                alpha:1.0f]; 

    messageView.layer.cornerRadius = 10.0f; 

    [messageView.layer setMasksToBounds:YES]; 

    [messageView setUserInteractionEnabled:YES]; 

    // INITIATE THE TITLE FOR THE ALERT VIEW 

    UILabel *titleLabel = [[UILabel alloc] 
          initWithFrame:CGRectMake(0, 5, ALERT_WIDTH, BUTTON_HEIGHT)]; 

    titleLabel.backgroundColor = [UIColor clearColor]; 

    titleLabel.textAlignment = NSTextAlignmentCenter; 

    titleLabel.text = title; 

    titleLabel.font = [UIFont fontWithName:ROBOTO_MEDIUM size:15.0f]; 

    [messageView addSubview:titleLabel]; 

    if (contentView) { 
     // NEED TO INCUDE THE CONTENT VIEW MIDDLE OF TITLE AND BUTTON. 

     [messageView addSubview:contentView]; 
    } else { 
     // NEED TO INCLUDE THE MESSAGE IN THE MIDDLE OF TITLE AND BUTTON 

     UILabel *contentLabel = [[UILabel alloc] 
           initWithFrame:CGRectMake(10, BUTTON_HEIGHT - 5, ALERT_WIDTH - 20, 
                  DEFAULT_CONTENT_HEIGHT + 5)]; 

     contentLabel.backgroundColor = [UIColor clearColor]; 

     contentLabel.textAlignment = NSTextAlignmentCenter; 

     contentLabel.textColor = ALERT_TEXTCOLOR; 

     contentLabel.numberOfLines = 4; 

     contentLabel.adjustsFontSizeToFitWidth = YES; 

     contentLabel.text = message; 

     contentLabel.font = [UIFont fontWithName:ROBOTO_LIGHT size:14.0f]; 

     [messageView addSubview:contentLabel]; 
    } 

    // TWO BUTTONS HAS VALUES. 

    UILabel *dividerLabel = [[UILabel alloc]init]; 

    if (temp) { 

     dividerLabel.frame=CGRectMake(0,(messageView.frame.size.height - BUTTON_HEIGHT)-3, 
             ALERT_WIDTH, 1); 


    }else if(temp1){ 

     dividerLabel.frame=CGRectMake(0,(messageView.frame.size.height - BUTTON_HEIGHT), 
             453, 1); 



    }else{ 

     dividerLabel.frame=CGRectMake(0,(messageView.frame.size.height - BUTTON_HEIGHT), 
             ALERT_WIDTH, 1); 

    } 

    dividerLabel.backgroundColor = [UIColor colorWithRed:(212/255.0) 
                green:(216/255.0) 
                blue:(217/255.0) 
                alpha:1]; 

    [messageView addSubview:dividerLabel]; 

    NSInteger limit = (otherButton == nil || button == nil) ? 1 : 2; 

    for (NSInteger i = 0; i < limit; i++) { 
     if (i) { 
      UILabel *buttonDividerLabel = [[UILabel alloc] 
              initWithFrame:CGRectMake(
                    (i * (ALERT_WIDTH/limit)), 
                    (messageView.frame.size.height - BUTTON_HEIGHT), 1, 
                    BUTTON_HEIGHT)]; 

      buttonDividerLabel.backgroundColor = [UIColor colorWithRed:(212/255.0) 
                   green:(216/255.0) 
                    blue:(217/255.0) 
                   alpha:1]; 

      [messageView addSubview:buttonDividerLabel]; 
     } 

     UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 



     [btn setFrame:CGRectMake((i * (ALERT_WIDTH/limit)), 
           (messageView.frame.size.height - BUTTON_HEIGHT), 
           ALERT_WIDTH/limit, BUTTON_HEIGHT)]; 

     if (temp1) { 

      [btn setFrame:CGRectMake((i * (453/limit)), 
            (messageView.frame.size.height - BUTTON_HEIGHT), 
            453/limit, BUTTON_HEIGHT)]; 

     } 

     btn.tag = i; 

     NSString *btnString; 

     UIColor *textColor; 

     if (limit > 1) { 
      btnString = (i) ? otherButton : button; 

      textColor = (i) ? BUTTON_TEXTCOLOR : [UIColor lightGrayColor]; 
     } else { 
      if (otherButton) { 
       btnString = otherButton; 
      } else { 
       btnString = button; 
      } 

      textColor = BUTTON_TEXTCOLOR; 
     } 

     [btn setTitle:btnString forState:UIControlStateNormal]; 

     [btn setExclusiveTouch:YES]; 

     [btn addTarget:self 
       action:@selector(buttonClicked:) 
     forControlEvents:UIControlEventTouchUpInside]; 

     [btn.titleLabel setFont:[UIFont fontWithName:ROBOTO_MEDIUM size:(temp1)?16:15.0f]]; 

     [btn setTitleColor:textColor forState:UIControlStateNormal]; 

     [messageView addSubview:btn]; 
    } 

    [self addSubview:messageView]; 

    return self; 
} 

- (void)showInWindow { 
    [[[[UIApplication sharedApplication] windows] firstObject] addSubview:self]; 

    [[[[UIApplication sharedApplication] windows] firstObject] 
     bringSubviewToFront:self]; 

    messageView.transform = CGAffineTransformMakeScale(0.9, 0.9); 

    [UIView animateWithDuration:0.2 
     delay:0 
     options:UIViewAnimationOptionCurveEaseOut 
     animations:^{ 
     messageView.transform = CGAffineTransformIdentity; 

     } 
     completion:^(BOOL finished) { 
     indicatorView.alpha = 1.0; 
     }]; 

    [self layoutIfNeeded]; 
} 

- (void)dismiss { 

    if ([indicatorView superview]) { 
    [indicatorView removeFromSuperview]; 

    indicatorView = nil; 
    } 

    [UIView animateWithDuration:0.2 
     animations:^{ 
     //  parentView.alpha = 0.0; 
     messageView.alpha = 0.0; 
     indicatorView.alpha = 0.0; 

     } 
     completion:^(BOOL finished) { 

     [messageView removeFromSuperview]; 

     messageView = nil; 

     [self removeFromSuperview]; 
     }]; 
} 

- (void)buttonClicked:(UIButton *)btn { 

    if ([self.delegate 
      respondsToSelector:@selector(QAlertView:clickedAtButtonIndex:)]) { 

    [self.delegate QAlertView:self clickedAtButtonIndex:btn.tag]; 
    } 

    [self dismiss]; 
} 

感谢。

回答

2

在你的方法- (CGRect)getBounds

方法UIInterfaceOrientationIsPortraitUIInterfaceOrientationIsLandscape仅在iOS8上及更高版本

可用性

可在搭载iOS 8.3及更高版本。

检查这些情况下手动

enum UIInterfaceOrientation : Int { 
    case Unknown 
    case Portrait 
    case PortraitUpsideDown 
    case LandscapeLeft 
    case LandscapeRight 
} 
+0

谢谢。这将是很好,如果你给一些建议iOS 7 – Sakthi

+0

嗨,你可以检查interfaceOrientation == UIInterfaceOrientationPortrait就像在@ du30的文章 – Ted

+0

不要忘了点击下面的检查你喜欢的答案:) – Ted

1
- (CGRect)getBounds { 

    [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 

    NSString *ver = [[UIDevice currentDevice] systemVersion]; 

    float ver_float = [ver floatValue]; 

    if (ver_float >= 8.0) { 
    return screenBounds; 
    } 

    CGFloat width = CGRectGetWidth(screenBounds); 

    CGFloat height = CGRectGetHeight(screenBounds); 

    UIInterfaceOrientation interfaceOrientation = 
     [UIApplication sharedApplication].statusBarOrientation; 

    if (interfaceOrientation == UIInterfaceOrientationPortrait) { 
    screenBounds.size = CGSizeMake(width, height); 
    } else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    screenBounds.size = CGSizeMake(height, width); 
    } 
    return screenBounds; 
}