IOS UIImage Scale and Crop, масштабирование на самом деле делает изображение меньше?

я использую чужой код жеста щипка для масштабирования, который работает идеально, но он масштабирует мое изображение в моем приложении для редактирования фотографий, и как только пользователь нажимает «Завершить масштабирование», мне нужно, чтобы изменения были отражены и сохранены, или, по-другому, мне нужно, чтобы изображение на самом деле можно увеличить и обрезать, если кто-то использовал щепотку для масштабирования. Я подумал, что мог бы использовать масштаб, который они масштабировали * размер кадра для uigraphicsbeginimagecontext, но эта стратегия не работает, поскольку, когда пользователь масштабирует изображение и нажимает кнопку «Готово», изображение сохраняется меньше, потому что этот теперь очень большой размер сжимается в представлении когда то, что я действительно хочу, обрезаю все остатки и не делаю никакой подгонки.

- (IBAction)pinchGest:(UIPinchGestureRecognizer *)sender{


if (sender.state == UIGestureRecognizerStateEnded
    || sender.state == UIGestureRecognizerStateChanged) {
    NSLog(@"sender.scale = %f", sender.scale);

    CGFloat currentScale = self.activeImageView.frame.size.width / self.activeImageView.bounds.size.width;
    CGFloat newScale = currentScale * sender.scale;

    if (newScale < .5) {
        newScale = .5;
    }
    if (newScale > 4) {
        newScale = 4;
    }

    CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale);
    self.activeImageView.transform = transform;
    scalersOfficialChange = newScale;
    sender.scale = 1;

}
}

- (IBAction)doneMoverViewButtonPressed:(UIButton *)sender {
// turn off ability to move & scale
moverViewActive = NO;

NSLog(@"%f %f",dragOfficialChange.x,dragOfficialChange.y);
NSLog(@"%f",rotationOfficialChange);
NSLog(@"%f",scalersOfficialChange);


//problem area below...
CGSize newSize = CGSizeMake(self.activeImageView.bounds.size.width * scalersOfficialChange, self.activeImageView.bounds.size.height * scalersOfficialChange );

UIGraphicsBeginImageContext(newSize);

[self.activeImageView.image drawInRect:CGRectMake(dragOfficialChange.x, dragOfficialChange.y, self.layerContainerView.bounds.size.width, self.layerContainerView.bounds.size.height)];

self.activeImageView.image = UIGraphicsGetImageFromCurrentImageContext();


UIGraphicsEndImageContext();

[self hideMoveViewerAnimation];

//resets activeimageview coords
CGRect myFrame = self.layerContainerView.bounds;
myFrame.origin.x = 0;
myFrame.origin.y = 0;
self.activeImageView.frame = myFrame;

//reset changes values
dragOfficialChange.x = 0;
dragOfficialChange.y = 0;
rotationOfficialChange = 0;
scalersOfficialChange = 0;

}

person rezand    schedule 21.06.2013    source источник


Ответы (1)


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

Тогда давайте попробуем этот метод:

//The method: drawInRect:(CGRect) will scale your pic and squeeze it to fit the Rect area
//So if you dont want to scale your pic, you can use the method below
[image drawAsPatternInRect:(CGRect)_rect];
//This method would not scale your image and cut the needless part
person Nathan Ou    schedule 21.06.2013
comment
Это направляет меня в правильном направлении, поэтому, спасибо, мне, возможно, придется переписать жест сжатия, проблема заключается в попытке перевести то, что показано, из жеста преобразования в жесте сжатия в окончательный рисунок, который точно соответствует ему. Я не совсем уверен, что делает преобразование, но предположил, что изменение размера представления изображения, которое, как я думал, будет в порядке в качестве предварительного просмотра, но, как я уже сказал, у меня возникли проблемы с переводом этого в окончательное изображение и сбросом изображения обратно после его преобразования. еще раз спасибо. - person rezand; 21.06.2013