繁体   English   中英

iOS 7中的自定义UIView方向问题

[英]Custom UIView orientation issue in iOS 7

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

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

iOS 7屏幕:

在此输入图像描述

iOS 8屏幕:

在此输入图像描述

我的代码在这里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];
}

提前致谢。

在你的方法- (CGRect)getBounds

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

可用性

适用于iOS 8.3及更高版本。

手动检查这些情况

enum UIInterfaceOrientation : Int {
    case Unknown
    case Portrait
    case PortraitUpsideDown
    case LandscapeLeft
    case LandscapeRight
}
- (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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM