Масштабирование UIImageView с помощью жеста - PullRequest
1 голос
/ 17 марта 2012

Я использую жест щипка, чтобы позволить пользователям увеличивать / уменьшать размер изображения.Я временно манипулирую этим CGAffineTransform, чтобы позволить пользователю поиграть с масштабом, затем просто отменяю его и устанавливаю размер кадра так, чтобы изображение масштабировалось с качеством (CGAffineTransformScale ничего не делает для качества изображения и только растягивает изображение).

    -(void)handlePinch:(UIPinchGestureRecognizer *)recognizer{
    if(recognizer.state == UIGestureRecognizerStateBegan){
        self.alpha = 0.7;
        startingTransform = self.transform;
    }
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;
    if (recognizer.state == UIGestureRecognizerStateEnded){
        self.alpha = 1.0;
        CGRect endFrame = self.frame;
        self.transform = startingTransform;
        self.frame = endFrame;
        //self.transform = CGAffineTransformRotate(self.transform, acos(startingTransform.c)); //reapply rotation?
    }
}

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

Я думал, что смогу перенести исходное вращение и применить его после установки рамки, но я не думаю, что это работает.Любая помощь приветствуется.Спасибо

Ответы [ 2 ]

1 голос
/ 17 марта 2012

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

http://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intfm/UIScrollViewDelegate/viewForZoomingInScrollView:

1 голос
/ 17 марта 2012

Обратите внимание, что в документации UIView говорится, что как только преобразование UIViews не является его преобразованием идентичности, свойство frame становится неопределенным и не должно использоваться, поэтому не полагайтесь на CGRect endFrame = ... для работы.

В противном случае, если вы хотите, чтобы качество изменилось, просто установите преобразование на единицу, масштабируйте рамку и затем повторно примените преобразование, чтобы сохранить вращение. Это должно работать нормально.

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