CGAffineTransform меняет view.bounds?

  

Представления имеют оба кадра (координаты в системе координат суперпредставления)   и bounds (координаты в собственной системе координат), но если вы   преобразовать представление, вы не должны использовать или полагаться на свойство кадра   больше. Если вы используете преобразования, работайте с границами   только свойство, а не свойство фрейма, поскольку применяются преобразования   до границ, но не обязательно точно отражены в кадре

http://iphonedevelopment.blogspot.jp/2008/10/demystifying- cgaffinetransform.html

Я хотел посмотреть, что он имеет в виду в вышеприведенном абзаце и напечатал «frame» и «bounds»
И я вижу, что только «кадр» меняется во время щепотки.

- (IBAction)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
    NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity);
    NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    NSLog(@"After, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));

    recognizer.scale = 1;
}

вывод: (увеличение)

2012-07-02 14:53:51.458 GestureRec[1264:707] scale: 1.030111, velocity: 0.945660
2012-07-02 14:53:51.466 GestureRec[1264:707] Before, frame: {{0, 124}, {320, 160}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.473 GestureRec[1264:707] After, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.480 GestureRec[1264:707] scale: 1.074539, velocity: 1.889658
2012-07-02 14:53:51.484 GestureRec[1264:707] Before, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.494 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.499 GestureRec[1264:707] scale: 1.000000, velocity: 1.889658
2012-07-02 14:53:51.506 GestureRec[1264:707] Before, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.510 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}

Я что-то неправильно понимаю или автор в блоге не прав?

7 голосов | спросил eugene 2 J000000Monday12 2012, 09:25:05

1 ответ


0

Я думаю, что у меня это есть:

Блог правильный, согласно даже Apple, сами :

  

Чтобы перевести или масштабировать систему координат, вы изменяете вид   ограничивает прямоугольник ...

Однако границы не меняются, поскольку сам прямоугольник по-прежнему имеет тот же размер, о котором вы сообщили, только масштабированная с ним система координат. Вы видите:

  

Изменение прямоугольника границ устанавливает базовую систему координат с   с которого начинается все рисование, выполняемое видом.

и поскольку мы никогда не меняем явно границы, изменяется только рамка представления относительно его суперпредставления.

На самом деле, я могу математически доказать, что границы никогда не меняются! Здесь, вместо этого, запустите этот пример:

NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity);
    NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    NSLog(@"After, frame: %@, bounds: %@ transform:%@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds), NSStringFromCGAffineTransform(recognizer.view.transform));

    recognizer.scale = 1;

Теперь, если вы заметили, значения, представленные из NSStringFromCGAffineTransform(), умноженные на границы, эквивалентны рамке представления. Но как насчет того, что сказал блог? Не обязательно верно. Матрицы преобразования могут применяться не только к x и y этой вещи, если бы мы действительно этого хотели, мы могли бы преобразовать значения z и повернуть их, а также перевернуть, и в любом случае, все они изменяют свойство кадра нелинейным образом особенно при использовании в тандоме.

Интересная загадка, если я сам так скажу.

ответил CodaFi 2 J000000Monday12 2012, 10:06:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132