Что означает «неверный кадр» точно после выполнения преобразования? - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть простое приложение, которое позволяет пользователю перетаскивать / масштабировать изображение на экране с помощью распознавателей панорамирования и сжатия.Как известно из API Apple, после выполнения преобразования, как я делаю в методе масштабирования, фрейм становится «недействительным».В связи с тем, что я постоянно использую рамку своего просмотра изображений для вычисления размера шкалы и расстояния перевода, даже после того, как я выполнил преобразование, и все продолжает работать нормально, мне интересно, что с рамкой стало недействительным?

Я спрашиваю об этом, потому что сейчас я пытаюсь обрезать изображение, которое было перемещено и масштабировано, и я использую его значение кадра, чтобы определить область обрезки, и я получаю забавные результаты.Мне интересно, может ли быть проблема с неправильным фреймом или это может быть что-то еще.Вот мой код для вашей справки:

CGRect croppedRect = CGRectMake(fabsf(self.oldImageView.frame.origin.x), fabsf(self.oldImageView.frame.origin.y), 316, 316);
CGImageRef croppedImageRef = CGImageCreateWithImageInRect(self.oldImageView.image.CGImage, croppedRect); 
UIImage *croppedImage = [UIImage imageWithCGImage: croppedImageRef];
CGImageRelease(croppedImageRef);
UIImageView *newImageView = [[UIImageView alloc] initWithImage: croppedImage];

Ответы [ 2 ]

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

Неверный кадр = смешные результаты.

Я думаю, что недействительный означает, что это не гарантирует неправильное значение, но это может быть. Вам повезло с использованием фрейма благодаря удаче.

Если у вас преобразованный вид и вам нужна рамка, вы можете использовать этот код:

CGRect frame = [[view superview] convertRect:view.bounds fromView:view];

Пока он не повернут. Если он повернут, «рамка» не может быть представлена ​​в виде CGRect, который может представлять только прямоугольники, выровненные по осям. Вы можете использовать convertPoint для преобразования каждого из углов границ, если эта информация пригодится вашей программе.

Или установить рамку, если она не повернута

view.bounds = [view convertRect:newFrame fromView:[view superview]];
0 голосов
/ 09 ноября 2011

Вы не должны использовать фрейм в любом случае в этом случае. Кадр определяется в системе координат суперпредставления. Вы указываете аргумент для CGImageCreateWithImageInRect в системе координат изображения, которая, как я подозреваю, такая же, как и в системе координат представления изображения, даже при преобразовании. Вы должны использовать границы вместо фрейма в этом коде. Либо это, либо (0,0, 0,0) в качестве источника. Я не могу точно сказать, чего вы пытаетесь достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...