シンプルなiPad画像コラージュアプリに問題があります。さまざまなUIImageViewをドラッグアンドドロップできるUIImageViewがあります。ドラッグしたビューは、回転および拡大できます。ユーザーが画像の編集を終えたら、すべての画像を最終的な画像にマージします。私の解決策は、UIGraphicsを使用して大きな画像を描画し、次にすべてのサブビューをループしてコンテキストで描画することでした。
- (UIImage*)mergeImages
{
CGSize imageSize = imageView.frame.size;
UIGraphicsBeginImageContext(imageSize);
[imageView.image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
[[imageView subviews] enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
UIImage *imageOriginal = ((UIImageView*)object).image;
CGRect rect = ((UIImageView*)object).frame;
UIImage *imageToAdd = [self scaleImage:imageOriginal :rect.size];
// Find the w/h ratioes
float widthRatio = rect.size.width / imageOriginal.size.width;
float heightRatio = rect.size.height / imageOriginal.size.height;
// Calculate point to draw at
CGPoint pointToDrawAt;
if (widthRatio > heightRatio)
pointToDrawAt = CGPointMake(rect.origin.x + (rect.size.width / 2) - (imageToAdd.size.width / 2), rect.origin.y);
else
pointToDrawAt = CGPointMake(rect.origin.x, rect.origin.y + (rect.size.width / 2) - (imageToAdd.size.height / 2));
[imageToAdd drawAtPoint:pointToDrawAt];
}];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Save image in photogalery
UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
return newImage;
}
上記は、画像が回転していない限り問題なく機能します。だから私の質問は:
サブビューから回転角を見つける方法はありますか、それともUIViewをサブクラス化してプロパティにする必要がありますか?または、画像をマージして、角度やフィルターなどの描画固有のプロパティを取得する別の方法はありますか?
私がさらなるコードまたは何かを手伝うことができるならば、ただコメントしてください。そして、事前に感謝します:)