Как я создаю экземпляры NSColor, которые точно соответствуют экземплярам в Photoshop макет UI?

Вы можете сделать это на самом компоненте или на его родительском элементе и передать ему значение в качестве реквизита.

Просто подпишитесь на наблюдаемое в событии componentDidMount :

componentDidMount() {
   window.opener.app.varCollection$.subscribe(val => this.setState({value:val}))
}

Хорошей практикой является обработка отмены подписки на событие componentWillUnmount с использованием оператора takeUntil и предмет:

unmount$ = new Subject() //component class property

componentDidMount() {
   //if using rxjs 6:
   window.opener.app.varCollection$
     .pipe(takeUntil(this.unmount$)) 
     .subscribe(val => this.setState({value:val}))
   //if using rxjs 4 or 5:
   window.opener.app.varCollection$
     .takeUntil(this.unmount$)
     .subscribe(val => this.setState({value:val}))
}

componentWillUnmount() {
   this.unmount$.next(true)
}

render() {
   const {value} = this.state //now you have the value on the render funtion
   ...
}
10
задан Chris Hanson 9 January 2009 в 08:07
поделиться

3 ответа

Нет такой вещи как "чистый" цвет RGB, это последовательно от одного дисплея до следующего. Если Вы не будете работать в стандартизированном цветовом пространстве, числа, которые собираются для цвета на одном дисплее, вероятно, представят немного по-другому на другом.

Сделайте, чтобы Ваш разработчик преобразовал Ваши макеты в пространство стандартного цвета, такие как sRGB. Затем можно использовать методы на NSColor, которые принимают не только значения компонента, но и цветовое пространство, в котором находятся компоненты; это доберется, Вы окрашиваете, который должен выглядеть подобным на любом дисплее.

Другими словами, образец цвета, сделанный из (R, G, B) = (1.0, 1.0, 1.0) в Photoshop с помощью sRGB, должен выглядеть фактически идентичным образцу цвета, оттянутому с помощью цвета, Вы получаете этот путь:

NSColorSpace *sRGB = [NSColorSpace sRGBColorSpace];

CGFloat components[3] = { 1.0, 1.0, 1.0 };
NSColor *sRGBRed = [NSColor colorWithColorSpace:sRGB components:&components count:3];

Отметьте хотя это +[NSColorSpace sRGBColorSpace] только доступно на Mac OS X 10,5 Leopard и выше. Если все еще необходимо работать на Tiger, Вы могли бы записать немного служебного приложения, которое работает 10.5 и преобразовывает канонические цвета sRGB в калиброванное пространство RGB:

NSColor *calibratedColor = [sRGBRed colorUsingColorSpaceName:NSCalibratedRGBColorSpace];

Независимо от того, используете ли Вы sRGB или калиброванное пространство, после того как у Вас есть ряд цветов, Вы могли поместить их в NSColorList, который Вы пишете в файл и затем загружаете из ресурсов своего приложения во времени выполнения.

8
ответ дан 4 December 2019 в 01:32
поделиться

Вы попытались выключить управление цветом в Photoshop? С включенным управлением цветом фактические отображенные пиксельные значения RGB и те, о которых сообщает Photoshop не могут быть тем же.

2
ответ дан 4 December 2019 в 01:32
поделиться

Спасибо, я просто попытался создать тест PSD с чистыми значениями RGB, и я также создал простое приложение с целью, которое отображается [NSColor redColor], [NSColor greenColor] и [NSColor blueColor].

Когда я выбираю PSD (открытый в Photoshop или Предварительном просмотре), Эльф показывает мне чистые значения (например, R:255 G:0 B:0 для красного), но когда я выбираю свое приложение, это показывает нечистые цветы, например, (R:253 G:2 B:30) для [NSColor redColor]. Я получаю тот же результат, если я использую [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0] вместо [NSColor redColor].

0
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: