2012-03-30 15 views
1

グラデーションの背景にストライプが埋め込まれた矩形であるUIImageを作成するルーチンをコーディングしようとしています。縞模様の線がどこにも表示されない

私のコードは以下の通りで、大部分のケースで問題なく動作しました。興味深いことに、これはフックですが、高さ21をstripedWidthとして渡すと機能しません。

これを実行すると、ストライプは水平方向に表示されますが、垂直方向(y =)-40で開始し、約(y =)4で終了します。これをよりよく見るには、問題の影響を示すこの画像それぞれを表示してください:

なぜこれが起こっているのか、それとも私がそれに対して何ができるのでしょうか?それを見つけた

enter image description here

-(UIImage*) stripedTextureWithStartingColor:(UIColor*) startColor withEndingColor:(UIColor*) endColor withHeight:(NSUInteger) height withStripeWidth:(NSUInteger) stripeWidth withStripeColor:(UIColor*) stripedColor { 
    CGSize size = CGSizeMake(2 * stripeWidth, height); 
    UIGraphicsBeginImageContext(size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    @try { 
    CGContextSetAllowsAntialiasing(context, true); 
    CGContextSetShouldAntialias(context, true); 
    NSArray* colors = [NSArray arrayWithObjects:(id) startColor.CGColor, (id) endColor.CGColor, nil]; 
    CGFloat locations[2]; 
    locations[0] = 0.0; 
    locations[1] = 1.0; 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); 
    CGColorSpaceRelease(colorSpace); 
    CGContextDrawLinearGradient(context, gradient, CGPointZero, CGPointMake(0, size.height - 1), 0); 
    CGGradientRelease(gradient); 
    CGContextFillPath(context); 

    int lineWidth = (int) stripeWidth; 
    CGContextSetLineWidth(context, lineWidth/2); 
    int lineCount = (float) size.height/(float) lineWidth; 
    lineCount -= 2; 

    for (int i=0; i<lineCount; i++) { 
     CGContextSetStrokeColorWithColor(context, stripedColor.CGColor); 
     float x1 = -size.height + i * 2 * lineWidth - lineWidth; 
     float y1 = size.height - 1 + lineWidth; 
     float x2 = -size.height + i * 2 * lineWidth + size.height - lineWidth; 
     float y2 = -lineWidth; 
     CGContextMoveToPoint(context, x1, y1); 
     CGContextAddLineToPoint(context, x2, y2); 
     CGContextStrokePath(context); 
    } 

    UIColor* lineTopColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9]; 
    UIColor* lineBottomColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.5]; 

    CGContextSetStrokeColorWithColor(context, lineTopColor.CGColor); 
    CGContextMoveToPoint(context, 0, 0); 
    CGContextAddLineToPoint(context, size.width + 1, 0); 
    CGContextStrokePath(context); 

    CGContextSetStrokeColorWithColor(context, lineBottomColor.CGColor); 
    CGContextMoveToPoint(context, 0, size.height - 1); 
    CGContextAddLineToPoint(context, size.width + 1, size.height - 1); 
    CGContextStrokePath(context); 

    } 
    @finally { 
    CGContextRestoreGState(context); 
    } 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

答えて

1

、私のアルゴリズムは、ライン

+0

の開始と少し間違っていたあなたは正確に間違っていたものを投稿できますか? –

関連する問題