0

CoreImageサムネイルを取得し、それにフィルターを適用してから、カスタムUITableViewCell's imageViewプロパティに設定するコードが少しあります。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
    ^{
        CIImage *inputImage = [[CIImage imageWithCGImage:self.thumbnail.CGImage]retain];
        CIFilter *filter =    [[CIFilter filterWithName:@"CISepiaTone" keysAndValues:
                                kCIInputImageKey, inputImage,
                                @"inputIntensity", [NSNumber numberWithFloat:1.0],
                                nil] retain];
        CIImage *outputImage = [[filter outputImage] retain];
        CGImageRef cgimage = [self.context createCGImage:outputImage fromRect:[outputImage extent]];
        filtersTableViewCellItem.thumbnail = [UIImage imageWithCGImage:cgimage];

        [filter release];
        [outputImage release];
        [inputImage release];
        CGImageRelease(cgimage);

        dispatch_async(dispatch_get_main_queue(),
        ^{
            UITableViewCell *tableViewCell = [[self cellForRowAtIndexPath:indexPath] retain];

            if (tableViewCell)
            {
                [filtersTableViewCell.activityIndicatorView stopAnimating];
                filtersTableViewCell.imageView.image = filtersTableViewCellItem.thumbnail;
            }

            [tableViewCell release];
        });
    });

サムネイルは適切に作成されていますが、で更新されていませんimageView。私はsetNeedsDisplay役に立たないようにしようとしました。面白いことに、私がこのような同様のコードを使用したが、カスタムを使用していなかった場合UITableViewCell、それは完全に正常に機能しました。なぜこれが機能しないのかについて誰かが洞察を持っていますか?

4

3 に答える 3

1

そのセルをリロードしてみてください。

[self.tableView reloadRowsAtIndexPath:indexPath withAnimation:UITableViewRowAnimationAutomatic]
于 2013-02-01T03:44:53.607 に答える
1

これは、layoutSubviews メソッドで UITableViewCell の読み込みを行っていたため (UIImageView のフレームを設定していた)、GCD スレッドと競合していたため発生していました。このコードをすべて layoutSubviews に移動したところ、正常に動作するようになりました。

于 2013-02-02T00:26:33.107 に答える
0

あなたがチェックするためのいくつかのこと-

まず、そのnibファイルにカスタムビューを設定していなかった可能性はありますか?私も同じ問題を抱えていました。そのViewControllerのUIviewサブクラスを作成し、Interface Builderに移動して、ビューをそのUIViewサブクラスに設定してから、UIViewのインポートヘッダーをControllerクラスに追加しました。それは私のためにそれをしたものです

于 2013-02-01T03:45:04.637 に答える