AvTouch örnek kod uygulamasının retina ekranında çalışmasını sağlamaya çalışıyorum. Bunu yapan var mı? CALevelMeter sınıfta openGL ES retina desteği
, şu denedim:- (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;
}
ve contentScaleFactor "2" ayarlar. Harika, bu beklenen oldu. Fakat daha sonra layoutSubviews'ta CALevelMeter çerçevesi, olması gerekenin hala 1/2'si kadardır.
Herhangi bir fikrin var mı?
Ancak retina, daha yüksek çözünürlüğü hesaba katmak için çerçeve boyutunu iki katına çıkarmıyor mu? Bahsettiğim kodu ekledikten sonra bile, hala sadece 1/2'lik bir metre aldım. Bu sadece openGL metre için geçerlidir. UIView metre retina ile iyi çalışıyor. Şoktayım. – Bryan
@Bryan - avTouch örnek koduna bakarak, Apple'ın GLLevelMeter uygulamasında '_drawView 'uyguladıkları şekilde bir hata yaptığını görüyoruz. OpenGL'deki şeylerin boyutlarını belirlemek için noktaları olan görünümün sınırlarını kullanırlar, bunun yerine '_backingWidth' ve' _backingHeight' örnek değişkenlerini kullanmaları gerekir. Referansları, '_backingWidth' ve '_backingHeight 'ile sınırların büyüklüğü ve yüksekliğine göre değiştirin ve bu bir Retina ekranında düzgün bir şekilde çizilecektir. Örnek kodda bir hata raporu veriyorum. –
@Bryan - Düzenlemede değiştirilmesi gereken kodu cevabım için yerelleştirdim. –