Как получить и использовать элементы UIInterfaceOrientation из info.plist? - PullRequest
0 голосов
/ 07 ноября 2018

Я хотел бы получить item0 поддерживаемых ориентаций интерфейса в моем info.plist.

enter image description here

Для того, чтобы иметь что-то вроде этого:

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {

     NSArray *supportedOrientations = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UISupportedInterfaceOrientations"];

     return supportedOrientations[0]; 

}

Но, конечно, у меня ошибка типа несовместимости: Incompatible pointer to integer conversion returning 'id' from a function with result type

Как это решить?

1 Ответ

0 голосов
/ 07 ноября 2018

Как упомянул @Mats в своем комментарии, информационный словарь содержит строковые значения для поддерживаемых ориентаций. Вам необходимо преобразовать строковое значение в тип желания UIInterfaceOrientationMask. Вы можете использовать строковую категорию для этого.

NSString + UIDeviceOrientation.h

static NSString *kUIInterfaceOrientationPortrait           = @"UIInterfaceOrientationPortrait";
static NSString *kUIInterfaceOrientationLandscapeLeft      = @"UIInterfaceOrientationLandscapeLeft";
static NSString *kUIInterfaceOrientationLandscapeRight     = @"UIInterfaceOrientationLandscapeRight";
static NSString *kUIInterfaceOrientationPortraitUpsideDown = @"UIInterfaceOrientationPortraitUpsideDown";

@interface NSString (UIDeviceOrientation)

- (UIInterfaceOrientationMask)deviceOrientation;

@end

NSString + UIDeviceOrientation.m

@implementation NSString (UIDeviceOrientation)

- (UIInterfaceOrientationMask)deviceOrientation {
    UIInterfaceOrientationMask mask = UIInterfaceOrientationMaskAll;

    if ([self isEqualToString:kUIInterfaceOrientationPortrait]) {
        mask = UIInterfaceOrientationMaskPortrait;
    }
    else if ([self isEqualToString:kUIInterfaceOrientationLandscapeLeft]) {
        mask = UIInterfaceOrientationMaskLandscapeLeft;
    }
    else if ([self isEqualToString:kUIInterfaceOrientationLandscapeRight]) {
        mask = UIInterfaceOrientationMaskLandscapeRight;
    }
    else if ([self isEqualToString:kUIInterfaceOrientationPortraitUpsideDown]) {
        mask = UIInterfaceOrientationMaskPortraitUpsideDown;
    }

    return mask;
}

Swift версия

extension String {
private var kUIInterfaceOrientationPortrait: String {
    return "UIInterfaceOrientationPortrait"
}

private var kUIInterfaceOrientationLandscapeLeft: String {
    return "UIInterfaceOrientationLandscapeLeft"
}

private var kUIInterfaceOrientationLandscapeRight: String {
    return "UIInterfaceOrientationLandscapeRight"
}

private var kUIInterfaceOrientationPortraitUpsideDown: String {
    return "UIInterfaceOrientationPortraitUpsideDown"
}

public var deviceOrientation: UIInterfaceOrientationMask {

    switch self {
    case kUIInterfaceOrientationPortrait:
        return .portrait

    case kUIInterfaceOrientationLandscapeLeft:
        return .landscapeLeft

    case kUIInterfaceOrientationLandscapeRight:
        return .landscapeRight

    case kUIInterfaceOrientationPortraitUpsideDown:
        return .portraitUpsideDown

    default:
        return .all
    }
}
}
...