Как лучше всего получить экземпляр NSScreen
, который, скорее всего, будет проектором или дисплеем AirPlay? (или даже TV-Out?) Я пишу программное обеспечение для презентаций, и мне нужно знать, какой экран, скорее всего, представляет экран «презентации».
На ум пришло несколько вариантов:
A. Используйте второй экземпляр, если он есть. Конечно, это явно не даст хороших результатов, если подключено более двух экранов.
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
projectorScreen = screens[1];
}
B. Используйте первый экран, если он не главный. Причина этого в том, что в случае зеркального отображения первым должен быть экран с наибольшей глубиной пикселей.
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
if(screens[0] != projectorScreen) {
projectorScreen = screens[0];
}
}
C. Используйте самый нижний экран, который не является главным экраном. Причина в том, чтобы просто выбрать любой экран, который не является главным экраном.
NSScreen* projectorScreen = [NSScreen mainScreen];
NSArray* screens = [NSScreen screens];
if(screens.count > 1) {
for(NSScreen* screen in screens) {
if(screen != projectorScreen) {
projectorScreen = screen;
break;
}
}
}
D. Воспользуйтесь словарем deviceDescription
NSScreen
и найдите самый большой экран в реальных координатах. То есть разделить ширину и высоту NSDeviceSize
на NSDeviceResolution
, и теоретически это должно дать площадь в квадратных дюймах. Однако я не полностью уверен, что ОС знает реальный размер каждого экрана.
Любые другие предложения?
Конечно, не существует 100% правильной эвристики, но опять же, выбора правильного экрана в большинстве случаев должно быть достаточно.