0

画像とその名前でアイテムを表示するUITableViewがあります。問題は、各セルの画像が読み込まれるためにスクロールが遅れることです。

これが、iPhoneカメラからキャプチャして320x480にサイズ変更した画像を保存する方法です。

- (void)saveImage: (UIImage*)image{
if (image != nil)
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                         NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *imageName = [NSString stringWithFormat: @"image_%@.png",[NSDate date]];
    item.imageName = imageName;

    NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                      imageName];
    NSLog(@"%@",path);

    NSData* data = UIImagePNGRepresentation(image);
    [data writeToFile:path atomically:YES];

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:[image imageOrientation] forKey:@"kImageOrientation"];
} }

これが私がそれをサイズ変更している方法です

- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
CGImageRef imageRef = image.CGImage;

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();

// Set the quality level to use when rescaling
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height);

CGContextConcatCTM(context, flipVertical);  
// Draw into the context; this scales the image
CGContextDrawImage(context, newRect, imageRef);

// Get the resized image from the context and a UIImage
CGImageRef newImageRef = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

CGImageRelease(newImageRef);
UIGraphicsEndImageContext();    

return newImage;}

そして、これは私がcellForRowAtIndexPathにそれらをロードする方法です

- (UIImage*)loadImage:(NSString *) imageName{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                     NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                  [NSString stringWithString: imageName]];
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    UIImage *orientedImage= [UIImage imageWithCGImage: image.CGImage scale:1.0 orientation:  [userDefaults integerForKey:@"kImageOrientation"]];

return orientedImage;}

私が考えていたアプローチの1つは、UIImagesがロードされたNSMutableArrayを一度ロードして、そこから画像をフェッチすることです。このアプローチの問題は、すべてのセルに画像があるわけではないため、10個のセルがあり、最後の3つのセルには3つの画像しかないということです。ここでは、追加される画像のインデックスが0、1になるため、NSMutableArrayアプローチが問題になります。 2.2。

専門家がそれが機能するかどうかを確認するために、ここで強調したいもう1つの解決策があります。私は実際にCoreDataを使用しており、アイテムのモデルを生成しました。このクラスにUIImageフィールドを手動で追加し、それらのオブジェクトに画像を保存する場合、それは機能しますか、それとも間違っていますか?

4

0 に答える 0