Поверните, используя преобразование, затем измените источник кадра, и представление расширяется? - PullRequest
6 голосов
/ 02 мая 2010

Это довольно айфон iPhone. Я работаю над библиотекой, но сузил свою проблему до очень простого кода. Этот код создает представление 50x50, применяет преобразование поворота на несколько градусов, а затем сдвигает кадр вниз несколько раз. В результате вид 50x50 теперь выглядит намного больше.

Вот код:

// a simple 50x50 view
UIView *redThing = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];
redThing.backgroundColor = [UIColor redColor];

[self.view addSubview:redThing];

// rotate a small amount (as long as it's not 90 or 180, etc.)
redThing.transform = CGAffineTransformRotate(redThing.transform, 0.1234);

// move the view down 2 pixels
CGRect newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

// move the view down another 2 pixels
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

// move the view down another 2 pixels
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

// move the view down another 2 pixels
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

Итак, что, черт возьми, происходит? Теперь, если я переместу вид, применяя трансформацию преобразования, все будет работать нормально. Но это не то, что я хочу сделать, и это должно работать в любом случае.

Есть идеи?

1 Ответ

15 голосов
/ 02 мая 2010

Из документации UIView:

Если также установлено свойство transform, используйте вместо него свойства bounds и center; в противном случае анимация изменений свойства фрейма неправильно отражает фактическое местоположение представления.

Предупреждение. Если свойство transform не является тождественным преобразованием, значение этого свойства не определено и поэтому должно игнорироваться.

Другими словами, я бы опасался свойства frame, когда установлено transform.

...