1

完璧に機能するスケーリングのために他の誰かのピンチジェスチャコードを使用していますが、写真編集アプリで私の画像をスケーリングし、ユーザーがスケーリングの完了を押したら、変更を反映して保存するか、別の方法でそれを言う必要があります。誰かがピンチを使用して拡大縮小した場合、実際にズームインしてトリミングされます。スケーリングした量* 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;

}
4

1 に答える 1