Instagram과 비슷하게 UIImageView가 내부에있는 사각형 자르기보기 (UIScrollView)가 있습니다. 따라서 사용자는 정사각형 안의 세로 또는 가로 이미지 (화면 너비와 동일)를 드래그 한 다음 이미지를 스크롤 오프셋에서 잘라야합니다. UIImageView는 가로 세로 맞춤으로 설정됩니다. UIScrollView 내용 크기는 가로 또는 세로의 배 율 인수로 설정되어 가로 세로 비율에 따라 올바르게 렌더링됩니다. .CGContext - 점에서 이미지 자르기 및 축척
문제 : 사용자가 내가 주어진 크기에 따라 이미지의 최대 크기를 조정할 드래그 완료되면
[CGPoint있는 UIImage drawAtPoint]의 사용 (스크롤 오프셋에 그것을 자르 후 평방 1000x1000px을 말하고하자 나는 점을 상쇄 권리를 얻을 수있는 수학 권리를 얻을 수있다 나는 6+ 그것이 4S에 방법이 꺼집니다에이 가까이있는 경우 여기 규모와 작물에 대한 내 코드입니다 :..(UIImage *)squareImageFromImage:(UIImage *)image scaledToSize:(CGFloat)newSize {
CGAffineTransform scaleTransform;
CGPoint origin;
if (image.size.width > image.size.height) {
//landscape
CGFloat scaleRatio = newSize/image.size.height;
scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
origin = CGPointMake((int)(-self.scrollView.contentOffset.x*scaleRatio),0);
} else if (image.size.width < image.size.height) {
//portrait
CGFloat scaleRatio = newSize/image.size.width;
scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
origin = CGPointMake(0, (int)(-self.scrollView.contentOffset.y*scaleRatio));
} else {
//square
CGFloat scaleRatio = newSize/image.size.width;
scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
origin = CGPointMake(0, 0);
}
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextConcatCTM(context, scaleTransform);
[image drawAtPoint:origin];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
예를 들어 가로로 스크롤하면 왼쪽으로 스크롤을 드래그하면 이미지가 오른쪽으로 잘 렸을 때 오프셋은 6+에 가까울 것이지만 4S에서는 CGPoint의 관점에서 약 150-200 정도 떨어져있을 것입니다.
CGRect cropRect = CGRectMake(0.0f,0.0,SCREEN_WIDTH,SCREEN_WIDTH);
CGFloat ratio = (int)self.image.size.height/self.image.size.width;
CGRect r = CGRectMake(0.0,0.0,SCREEN_WIDTH,SCREEN_WIDTH);
if (ratio>1.00) {
//portrait
r = CGRectMake(0.0,0.0,SCREEN_WIDTH,(int)(SCREEN_WIDTH*ratio));
} else if (ratio<1.00) {
//landscape
CGFloat size = (int)self.image.size.width/self.image.size.height;
cropOffset = (SCREEN_WIDTH*size)-SCREEN_WIDTH;
r = CGRectMake(0.0,0.0,(int)(SCREEN_WIDTH*size),SCREEN_WIDTH);
}
NSLog(@"r.size.height == %.4f",r.size.height);
self.scrollView.frame = cropRect;
self.scrollView.contentSize = r.size;
self.imageView = [[UIImageView alloc] initWithFrame:r];
self.imageView.backgroundColor = [UIColor clearColor];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
self.imageView.image = self.image;
[self.scrollView addSubview:self.imageView];
스크롤에 확대/축소가 없으므로 이는 중요하지 않습니다. 오른쪽/왼쪽 또는 위/아래로 스크롤 할뿐입니다. 항상 1.0입니다. CGContextConcatCTM는 스크롤 오프셋이 배수가되도록 이미지의 크기를 조정합니다. 승수는 내가 알 수없는 것입니다. – user636066