繁体   English   中英

如何将这个客观c traitCollection转换为swift?

[英]How to translate this objective c traitCollection to swift?

我正在尝试从此链接( 针对iPad纵向和横向模式的Sizing类)在目标C中转换此代码。

这是我要翻译的代码:

@interface RDTraitCollectionOverrideViewController : UIViewController {
BOOL _willTransitionToPortrait;
UITraitCollection *_traitCollection_CompactRegular;
UITraitCollection *_traitCollection_AnyAny;
}

@end

@implementation RDTraitCollectionOverrideViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setUpReferenceSizeClasses];
}

- (void)setUpReferenceSizeClasses {
    UITraitCollection *traitCollection_hCompact = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
UITraitCollection *traitCollection_vRegular = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
_traitCollection_CompactRegular = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection_hCompact, traitCollection_vRegular]];

UITraitCollection *traitCollection_hAny = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassUnspecified];
UITraitCollection *traitCollection_vAny = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassUnspecified];
_traitCollection_AnyAny = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection_hAny, traitCollection_vAny]];
}

-(void)viewWillAppear:(BOOL)animated {
_willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width;
}

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
_willTransitionToPortrait = size.height > size.width;
}

-(UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController {
UITraitCollection *traitCollectionForOverride =           (_willTransitionToPortrait) ? _traitCollection_CompactRegular :    _traitCollection_AnyAny;
return traitCollectionForOverride;
}
@end

这就是我所拥有的,请记住,我在类声明下重命名了一些初始变量:

import UIKit

class ViewController: UIViewController {

var willTransitionToPortrait:Bool = false
var compactRegular = UITraitCollection()
var anyAny = UITraitCollection()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    setUpReferenceSizeClasses()
}

func setUpReferenceSizeClasses() {

    var traitCollection_hCompact = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Compact)
    var traitCollection_vRegular = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Regular)
    compactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact, traitCollection_vRegular])

    var traitCollection_hAny = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Unspecified)
    var traitCollection_vAny = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Unspecified)
    anyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny, traitCollection_vAny])
}

override func viewWillAppear(animated: Bool) {

    willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    willTransitionToPortrait = size.height > size.width
}


func overrideTraitCollectionForChildViewController(UIViewController) -> childViewController {

    var traitCollectionForOverride = (willTransitionToPortrait) ? compactRegular : anyAny

    return traitCollectionForOverride;
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

我想我几乎拥有所有东西,但最后一个功能我无法弄清楚它的含义。 任何帮助将非常感激。

我认为您在最后一个函数中缺少“替代”,请尝试用以下代码替换:

override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection! {
    //
}

这是完整的代码:

 import UIKit class ViewController: UIViewController { var willTransitionToPortrait:Bool = false var compactRegular = UITraitCollection() var anyAny = UITraitCollection() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. setUpReferenceSizeClasses() } func setUpReferenceSizeClasses() { var traitCollection_hCompact = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Compact) var traitCollection_vRegular = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Regular) compactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact, traitCollection_vRegular]) var traitCollection_hAny = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Unspecified) var traitCollection_vAny = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Unspecified) anyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny, traitCollection_vAny]) } override func viewWillAppear(animated: Bool) { willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width } override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { willTransitionToPortrait = size.height > size.width } override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection! { // var traitCollectionForOverride = (willTransitionToPortrait) ? compactRegular : anyAny return traitCollectionForOverride; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

暂无
暂无

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

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