CALayer перерисовывается при вращении - PullRequest
3 голосов
/ 24 ноября 2011

У меня есть это в моем коде рисования CALayer

- (void) drawInContext:(CGContextRef)ctx {
self.frame = self.superlayer.bounds;

CGFloat height = self.bounds.size.height;
CGFloat width = self.bounds.size.width;

CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor);

//Draw a stripe every other pixel
int count = 0; 
while (count < height) {   
    CGContextFillRect(ctx, CGRectMake(0, count, width, 1));
    count=count+2;
}

}

В основном, его рисунок булавки полосы сверху вид. Я хочу, чтобы он заполнил представление.

Вид зафиксирован на 40 высотах и ​​ширине iPad.

Когда я поворачиваюсь, я приказываю CALayer перерисовать (что является еще одной проблемой - я бы предпочел, чтобы оно просто автоматически масштабировалось до новой ширины).

Даже с лог-выходами ширины и высоты выше, это правильно. Но когда он рисует в ландшафте - справа ~ 100 пикселей ...

Какие-нибудь идеи или лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 15 мая 2012
-(void)layoutSublayersOfLayer:(CALayer *)layer{
CGFloat ht = self.frame.size.height/2 - 55/2;
arrowImage.frame = CGRectMake(self.frame.size.width-30, ht, 30.0f, 55.0f);
}

arrowImage is a CALayer

Это отлично сработало для меня.

1 голос
/ 24 ноября 2011

Вам необходимо переопределить layoutSublayers в родительском слое.Или layoutSubviews в родительском представлении (указав перерисовать в любом из этих методов).

0 голосов
/ 24 ноября 2011

Какая трата моего времени .... Я сдался и сделал это по-другому.

Также ..... Руководство по программированию Core Animation обмануло меня и сказал мне, что у CALayer есть autoResizingMask -что, вероятно, решило бы это для меня.У него нет этого свойства, во всяком случае, в версии для iOS… Возможно, в версии MacOS оно есть.

Я отказался делать это в CALayer и сделал то же самое в drawRect на UIView иустановить autoResizingMask моего UIView.

Это решает это.Хотя почему-то я чувствую, что должен делать это в CALayer ...?

...