2017-09-22 11 views
0

私は自分のカスタム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.currencyImageUIImageViewとしています。エラーは表示されなくなりましたが、私のself.currencyImageはまだ空です。

UPDATE 2:私はcurrencyIdentifierとして- (UIImage *)drawImageWithIdentifier:(NSString *)currencyIdentifier inView:(UIImageView *)imageViewに渡されるべき文字列プロパティを持っている私のUITableViewCellの.hファイルで :

私は最終的に私が作った間違いを発見しました。しかし、私が012ViewをTableViewControllerで行っているにもかかわらず、currencyIdentifierがNULLであるようです。このコードで

+0

tableviewcellが作成されている場所で重い処理をしないようにしてください。画像を配列に入れてからtableviewcellに渡すのではなく、 –

+0

@PulkitKumarSingh私の更新を確認してください –

+0

ok .... drawImageWithIdentifier ...この関数を呼び出していますか? –

答えて

0

問題

[currencyImage drawInRect:CGRectMake(pointX, pointY, imageRect.size.width, imageRect.size.height) blendMode:kCGBlendModeNormal alpha:0.1]; 

はいけない、あなたのイメージを作成しますUITableViewCellの

の内側にドローRECTを使用して、

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 
    cell.addsubview = yourImage 


    return cell 
    } 

    Hope this helps. 

    Try it out and let me know your result 
0

しないでくださいCALのdrawRect内のセルにサブビューとして追加ループ。その高価な方法。

イメージを別々のループで作成し、アレイに追加して使用します。

関連する問題