Estoy tratando de que la aplicación de código de muestra avTouch se ejecute en la pantalla Retina. ¿Alguien ha hecho esto?openGL ES retina support
En la clase CALevelMeter, he intentado lo siguiente:
- (id)initWithCoder:(NSCoder *)coder {
if (self = [super initWithCoder:coder]) {
CGFloat f = self.contentScaleFactor;
if ([self respondsToSelector:@selector(contentScaleFactor)])
{
self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
f = self.contentScaleFactor;
_showsPeaks = YES;
_channelNumbers = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:0], nil];
_vertical = NO;
_useGL = YES;
_meterTable = new MeterTable(kMinDBvalue);
[self layoutSubLevelMeters];
[self registerForBackgroundNotifications];
}
return self;
}
y se establece el contentScaleFactor a "2". Genial, eso era lo esperado. Pero luego en el layoutSubviews, CALevelMeter frame sigue siendo 1/2 de lo que debería ser.
¿Alguna idea?
¿Pero la retina no muestra el doble del tamaño del marco para dar cuenta de la resolución más alta? Incluso después de agregar el código que mencioné, solo obtengo un medidor de 1/2 de altura. Este es solo el caso del medidor OpenGL. El medidor UIView funciona bien con retina. Estoy perplejo. – Bryan
@Bryan: al mirar el código de muestra de avTouch, parece que Apple ha cometido un error en la forma en que implementaron '_drawView' en GLLevelMeter. Están usando los límites de la vista, que está en puntos, para determinar el tamaño de las cosas en OpenGL, cuando en su lugar deberían usar las variables de instancia '_backingWidth' y' _backingHeight'. Reemplace las referencias al tamaño y la altura de los límites con '_backingWidth' y' _backingHeight' y esto se dibujará correctamente en una pantalla Retina. Archivaré un informe de error en el código de muestra. –
@Bryan: he localizado el código que debe modificarse en la edición de mi respuesta. –