#ios #uiview #uiviewcontroller #calayer #iphone-4
#iOS #uiview #uiviewcontroller #calayer #iphone-4
Вопрос:
Я провожу несколько простых тестов добавления CALayer в UIView. В моем основном классе контроллера приложения для iPhone 4 я реализовал viewDidLoad
метод как таковой:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%s", __PRETTY_FUNCTION__);
CALayer* ca = [[CALayer alloc] init];
[ca setBounds:self.view.bounds];
[ca setBackgroundColor:[[UIColor blueColor] CGColor]];
[self.view.layer addSublayer:ca];
}
Синий фон занимает всего 1/4 экрана.
Интересно, не потому ли это, что я не принял во внимание дисплей retina? Какова наилучшая практика в этой ситуации?
Добавлены эти сообщения отладки:
NSLog(@"frame w:%f h:%f", self.view.frame.size.width, self.view.frame.size.height);
NSLog(@"bounds w:%f h:%f", self.view.bounds.size.width, self.view.bounds.size.height);
Выходной сигнал:
frame w:320.000000 h:460.000000
bounds w:320.000000 h:460.000000
Комментарии:
1. Каково значение
self.view.frame
? Можете ли вы подтвердить.2. @Deepak: Это {ширина: 320, высота: 460}. Добавлен вывод отладки и к самому вопросу.
Ответ №1:
setContentsScale
не имеет эффекта
[ca setContentsScale:[[UIScreen mainScreen] scale]];
Однако, если я использую
[ca setFrame:self.view.bounds];
это работает.
Комментарии:
1. 1 Хороший! При
position
равном нулю остальная часть содержимого исчезла с экрана.2. @Deepak: Я вижу! Таким образом, CALayer позиционирует себя на основе позиции / точки привязки, которая находится в центральной точке границ. Большое спасибо за вашу помощь.
3. Вы это поняли. Я просто интерпретировал. 🙂