2012-03-19 11 views
-5

I持って同じUIImage繰り返す必要があり、このコードは、:A UIImageが繰り返されていないcoregraphicsで作成

UIView *paperMiddle = [[UIView alloc] initWithFrame:CGRectMake(0, 34, 320, rect.size.height - 34)]; 
UIImage *paperPattern = paperBackgroundPattern(context); 
paperMiddle.backgroundColor = [UIColor colorWithPatternImage:paperPattern]; 
[self addSubview:paperMiddle]; 

をそしてこれはpaperBackgroundPattern方法である:

UIImage *paperBackgroundPattern(CGContextRef context) { 
    CGRect paper3 = CGRectMake(10, -15, 300, 16); 
    CGRect paper2 = CGRectMake(13, -15, 294, 16); 
    CGRect paper1 = CGRectMake(16, -15, 288, 16); 

    //Shadow 
    CGContextSetShadowWithColor(context, CGSizeMake(0,0), 10, [[UIColor colorWithWhite:0 alpha:0.5]CGColor]); 
    CGPathRef path = createRoundedRectForRect(paper3, 0); 
    CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]); 
    CGContextAddPath(context, path); 
    CGContextFillPath(context); 

    //Layers of paper 
    CGContextSaveGState(context); 
    drawPaper(context, paper3); 
    drawPaper(context, paper2); 
    drawPaper(context, paper1); 

    CGContextRestoreGState(context); 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 1), NO, 0); 
    UIImage *paperImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return paperImage; 
} 

それが繰り返されていません画像。しかし、そこに画像を持っているという結果は、画面の一番上のピクセルとして表示されているということです(これは私が与えたフレームではありません)。

なぜでしょうか?

+4

質問を削除して再投稿しないでください。http://stackoverflow.com/questions/9767477/isnt-repeating-background-created-in-coregraphics代わりに編集して改善してください。 –

答えて

2

私はcontextがあなたが渡してくれるものが何であるか分かりませんが、それが何であれ、それを描くべきではありません。そして、あなたはUIGraphicsBeginImageContextWithOptionsで作った文脈に何も描いていません。

イメージを生成する場合は、コンテキストを渡す必要はありません。UIGraphicsBeginImageContextWithOptionsが使用するものを使用してください。

UIImage *paperBackgroundPattern() { 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 1), NO, 0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // draw into context, then... 

    UIImage *paperImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return paperImage; 
} 

また、実際には320 ptの幅と1の高さの画像を作成しようとしていますか?あなたがそのような小さなイメージにそのような精巧なものを描いていることは奇妙に思えます。

+0

パーフェクト、ありがとう。イメージの内側のシャドウは7.5ピクセルです。だから、上からも下からも影が現れないように、それより大きくする必要があります。私はコードをこのメソッドに変更しているので、私はそれを削除すると思います。 – Andrew

関連する問題