私は自分のカスタムUITableViewCellを持っていて、その画像をセルクラスで描画したいと思っています。それは問題の任意の種類せずに画像を描画する通常のビューコントローラでUITableViewCellでコードを描いたカスタム画像
- (UIImage *)drawImageWithIdentifier:(NSString *)currencyIdentifier inView:(UIImageView *)imageView {
NSLog(@"width: %f, height: %f", imageView.frame.size.width, imageView.frame.size.height);
ColorTable *colorTable = [[ColorTable alloc] init];
CGFloat contentInset = imageView.frame.size.height/4;
UIView *backgroundView = [[UIView alloc] initWithFrame:self.imageView.bounds];
backgroundView.backgroundColor = [colorTable colorWithID:currencyIdentifier];
UIImage *currencyImage = [UIImage imageNamed:@"dollar_icon.png"];
UIGraphicsBeginImageContextWithOptions(backgroundView.bounds.size, NO, [UIScreen mainScreen].scale);
[[UIBezierPath bezierPathWithRoundedRect:backgroundView.bounds cornerRadius:backgroundView.frame.size.height/2] addClip];
[backgroundView.layer renderInContext:UIGraphicsGetCurrentContext()];
CGFloat aspectRatio = currencyImage.size.width/currencyImage.size.height;
if (aspectRatio < 1) {
//vertical image
CGRect imageRect = CGRectMake(0, 0, (backgroundView.frame.size.height - 2*contentInset) *aspectRatio , backgroundView.frame.size.height - 2*contentInset);
CGFloat pointX = (backgroundView.frame.size.width/2) - (imageRect.size.width/2);
CGFloat pointY = (backgroundView.frame.size.height/2) - (imageRect.size.height/2);
[currencyImage drawInRect:CGRectMake(pointX, pointY, imageRect.size.width, imageRect.size.height) blendMode:kCGBlendModeNormal alpha:0.1];
}
else if (aspectRatio > 1) {
//horizontal image
CGRect imageRect = CGRectMake(0, 0, (backgroundView.frame.size.height - 2*contentInset) *aspectRatio, backgroundView.frame.size.height - 2*contentInset);
CGFloat pointX = (backgroundView.frame.size.width/2) - (imageRect.size.width/2);
CGFloat pointY = (backgroundView.frame.size.height/2) - (imageRect.size.height/2);
[currencyImage drawInRect:CGRectMake(pointX, pointY, imageRect.size.width, imageRect.size.height) blendMode:kCGBlendModeNormal alpha:0.1];
}
else if (aspectRatio == 1) {
//square image
CGRect imageRect = CGRectMake(0, 0, backgroundView.frame.size.height - 2*contentInset, backgroundView.frame.size.height - 2*contentInset);
CGFloat pointX = (backgroundView.frame.size.width/2) - (imageRect.size.width/2);
CGFloat pointY = (backgroundView.frame.size.height/2) - (imageRect.size.height/2);
[currencyImage drawInRect:CGRectMake(pointX, pointY, imageRect.size.width, imageRect.size.height) blendMode:kCGBlendModeNormal alpha:0.1];
}
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return finalImage;
}
が、私はセルクラスにこのコードを入れたとき、私はこの<Error>: CGContextAddPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
どのようなエラーが表示されます。私はこのコードを使用していますプログラムでUITableViewCellのイメージを正常に描画するにはどうすればよいですか?
UPDATE:
私はbackgroundView
用サイズパラメータとしてself.imageView.bounds
を使用するので、それは私の間違いだったことが分かりました。私はIBで自分のセルを設計しており、セルクラスはself.currencyImage
をUIImageView
としています。エラーは表示されなくなりましたが、私のself.currencyImage
はまだ空です。
UPDATE 2:私はcurrencyIdentifier
として- (UIImage *)drawImageWithIdentifier:(NSString *)currencyIdentifier inView:(UIImageView *)imageView
に渡されるべき文字列プロパティを持っている私のUITableViewCellの.h
ファイルで :
私は最終的に私が作った間違いを発見しました。しかし、私が012ViewをTableViewControllerで行っているにもかかわらず、currencyIdentifier
がNULLであるようです。このコードで
tableviewcellが作成されている場所で重い処理をしないようにしてください。画像を配列に入れてからtableviewcellに渡すのではなく、 –
@PulkitKumarSingh私の更新を確認してください –
ok .... drawImageWithIdentifier ...この関数を呼び出していますか? –