如何同时使用UIColor和NSColor?

时间:2016-01-10 17:32:37

标签: ios iphone swift macos

在我提出问题之前的一个注意事项,以避免被标记为欺骗:我看了一遍。很多类似主题的问题都在Objective-C中,并使用Objective-C宏来解决这个问题。

简要说明:

UIColor是iOS定义颜色的方式,NSColor是Mac OS的方式。原因是,它必须处理Apple和Objective-C背后的历史。

我想为iOS和Mac OS X制作游戏。我在Swift中制作了一个Xcode项目,其中包含iOS和Mac OS X的构建目标。

游戏的一个组成部分是能够使用/操纵颜色,无论是用于设置背景,以编程方式绘制精灵/渐变,绘制形状......还有更多。

我的问题始于我必须使用NSColor用于Mac而UIColor用于iOS。

我尝试创建一个类Color,它是两个构建目标的一部分。我还有一个类ColorExtension,其中Color个子类,在Mac OS上是NSColor的子类,在iOS上是UIColor

结果是,我能够使用诸如Color.yellowColor()之类的方法。但是,当我必须使用Color的便利初始化程序(例如

)时,问题就开始解决了
Color(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)

那些便利初始化器不会继承} Color类,所以当我尝试做类似的事情时,我会遇到各种问题。

我希望能够使用这些方便的初始化程序,这样我就可以使用数百万种颜色渲染颜色,而不仅仅是易于使用的颜色。

我已经在iOS上看到了Objective-C宏#define UIColor,在Mac上看到了NSColor this code

#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;

#endif

但是,Swift不支持Objective-C宏,所以这样就不行了。

到目前为止我的代码用于定义颜色:

Color

import Foundation
import SpriteKit // only imported so I can try out stuff

class Color : ColorExtension {

}

ColorExtension(Mac)

import Foundation
import AppKit

class ColorExtension : NSColor {

}

ColorExtension(iOS)

import Foundation
import UIKit

class ColorExtension : UIColor {

}

0 个答案:

没有答案