25

tableView と detailView で同じ大きな画像を使用します。画像がtableViewに表示されているときにimageViewを40x40で塗りつぶす必要がありますが、画面の半分に引き伸ばされています。私はいくつかのプロパティを試しましたが、肯定的な結果はありません:

[cell.imageView setBounds:CGRectMake(0, 0, 50, 50)];
[cell.imageView setClipsToBounds:NO];
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView setContentMode:UIViewContentModeScaleAspectFill];

「事前定義されたスタイルのセル オブジェクト」をビルドした SDK 3.0 を使用しています。

4

7 に答える 7

32

次のように、Benのコードを拡張子としてNS-Extensionsファイルに入れて、任意の画像にそれ自体のサムネイルを作成するように指示できるようにします。

UIImage *bigImage = [UIImage imageNamed:@"yourImage.png"];
UIImage *thumb = [bigImage makeThumbnailOfSize:CGSizeMake(50,50)];

.hファイルは次のとおりです。

@interface UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size;
@end

次に、NS-Extensions.mファイルで:

@implementation UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size
{
    UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
    // draw scaled image into thumbnail context
    [self drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();        
    // pop the context
    UIGraphicsEndImageContext();
    if(newThumbnail == nil) 
        NSLog(@"could not scale image");
    return newThumbnail;
}

@end
于 2011-04-27T23:05:01.247 に答える
12

その場で縮小された大きな画像を使用するとメモリが多すぎるため、サムネイルバージョンをキャッシュします。

これが私のサムネイルコードです:

- (UIImage *)thumbnailOfSize:(CGSize)size {
    if( self.previewThumbnail )
        return self.previewThumbnail; // returned cached thumbnail

    UIGraphicsBeginImageContext(size);

    // draw scaled image into thumbnail context
    [self.preview drawInRect:CGRectMake(0, 0, size.width, size.height)];

    UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();    

    // pop the context
    UIGraphicsEndImageContext();

    if(newThumbnail == nil) 
        NSLog(@"could not scale image");

    self.previewThumbnail = newThumbnail;

    return self.previewThumbnail;
}

元の画像(私の場合はself.preview)を変更する場合は、キャッシュされたサムネイルを適切にクリアするようにしてください。

于 2009-10-13T16:02:35.337 に答える
2

その場でではなく事前にサムネイルを生成するという Ben Lachman の提案は賢明だと思ったので、彼のコードを調整して、配列全体を処理し、移植性を高めました (ハードコードされたプロパティ名はありません)。

- (NSArray *)arrayOfThumbnailsOfSize:(CGSize)size fromArray:(NSArray*)original {
    NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[original count]];
    for(UIImage *image in original){
        UIGraphicsBeginImageContext(size);
        [image drawInRect:CGRectMake(0,0,size.width,size.height)];
        UIImage *thumb = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [temp addObject:thumb];
    }
    return [NSArray arrayWithArray:temp];
}
于 2011-03-24T17:59:19.883 に答える
-1

UIImageView.autoresizesSubviewsおよび/または を設定してみてくださいUIImageView.contentStretch

于 2009-09-03T10:16:18.370 に答える
-1

インターフェイスビルダーとテーブルビューセルを使用して、これを機能させることができました。画像ビューの「モード」プロパティを「アスペクト フィット」に設定できます。プログラムでこれを行う方法がわかりません。

于 2009-07-31T16:17:12.407 に答える
-1

これは使えるかも?

yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];

および/または

cell.image = yourTableViewController.rowImage;

画像がすでに 40x40 の場合は、境界設定などについて心配する必要はありません...しかし、私もこれに慣れていないので、わかりませんが、Table View の行で遊んだことはありません/セル画像たくさん

お役に立てれば。

于 2009-06-30T16:28:27.443 に答える