Quindi sto provando a convertire un NSRect in un CGRect. Ho usato NSRectToCGRect()
che copia tutto più finemente, ma non tiene conto dell'asse dell'origine y.NSRect vs CGRect: inversione asse Y
Il problema: l'origine CGRect di (0,0) è in alto a sinistra. L'origine NSRect (0,0) è in basso a sinistra.
Quindi una casella NSRect (0,0,100,100)
è posizionata nella parte inferiore sinistra dello schermo, mentre una casella CGRect (0,0,100,100)
si trova nella parte superiore sinistra dello schermo.
Ho un hack che fissa la y origine attraverso la matematica di base:
fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y
Così l'equivalente di un NSRect (0,0,100,100)
è in realtà CGRect (0,800,100,100)
(sul mio 900px di altezza MBA). Comunque non mi piace, ho la sensazione che si romperà/avrà problemi con la retina o complicazioni future.
Qualcuno ha una soluzione o un'idea su come convertire correttamente NSRect in CGRect?
Cosa ti fa pensare che CoreGraphics abbia l'origine in alto a sinistra? Riesco a trovare solo un riferimento indiretto immediatamente, ma vedi http://developer.apple.com/library/ios/#documentation/2DDrawings/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html - cerca il testo "Il sistema di coordinate predefinito usato dal framework Core Graphics è basato su LLO. " (LLO = origine in basso a sinistra) – Tommy
La proprietà del frame NSWindow è NSRect, quindi la posiziono su 0,0 (schermata in basso a sinistra). Converto quel frame in CGRect, faccio uno screenshot usando CGDisplayCreateImageForRect (visualizza [0], windowCGRect). Lo screenshot è in alto a sinistra sullo schermo. – user339946
Non considerarlo come una differenza tra 'CGRect' e' NSRect'. Sono entrambe semplici strutture e i loro valori hanno un significato solo relativo a un sistema di coordinate (o quello del codice che ha fornito o consumato il rect). In questo caso la differenza è tra il sistema di coordinate dello schermo di AppKit e il sistema di coordinate dello spazio di visualizzazione CG, come descritto in [questa risposta] (http://stackoverflow.com/a/14228817/1218876). –