Вы можете сделать это на самом компоненте или на его родительском элементе и передать ему значение в качестве реквизита.
Просто подпишитесь на наблюдаемое в событии 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
...
}
Нет такой вещи как "чистый" цвет 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, который Вы пишете в файл и затем загружаете из ресурсов своего приложения во времени выполнения.
Вы попытались выключить управление цветом в Photoshop? С включенным управлением цветом фактические отображенные пиксельные значения RGB и те, о которых сообщает Photoshop не могут быть тем же.
Спасибо, я просто попытался создать тест 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].