0

Как вы устанавливаете градиентную заливку для cashapelayer? Связанные вопрос с более четким объяснением: Using Cocoa To Follow A Path With A GradientКак вы устанавливаете градиентную заливку для cashapelayer без использования маски?

мне нужен градиент, что это не маска, но вместо градиента, основанный на чертеже пути в cashapelayer в.

Я не могу использовать маску градиента сверху, потому что я делаю маршрут на мини-карте в своей игре. Поэтому, если игрок ходит по своим дорожкам, он должен быть другого цвета.

Я хочу, чтобы это как полилинии этого MAPview в:
Источник: http://cdn4.raywenderlich.com/wp-content/uploads/2014/06/23_multicolor_polyline.png

Я сделал маршрут миникарты по: каротажного все различные пользовательские направления, а затем запустить их через петлю в Безье путей.

Я приложил пути Безье, а затем положил его на кассовый аппарат.

Есть ли способ иметь разноцветные в банкомате?

Есть ли ключевой путь для cabasicanimation, который может помещать градиент?

Мой код ниже, и некоторые изображения.

[mymapview.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]; 
[[mymapview subviews] 
makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
int i = 0; 
int x = 17; 
int y = 272; 
int m = 16; 
UIBezierPath *kpath = [UIBezierPath bezierPath]; while (i < HistDirections.count) 
{ 
    if (i > 0) 
    { 
      UIBezierPath *path = [UIBezierPath bezierPath]; 
      [path moveToPoint:CGPointMake(x, y)]; 
      if ([[HistDirections objectAtIndex:i] intValue] ==1) 
      { 
       [path addLineToPoint:CGPointMake(x, y-m)]; 
       y = y - m; 
      } 
      else if ([[HistDirections objectAtIndex:i] intValue] ==2) 
      { 
       [path addLineToPoint:CGPointMake(x-m, y)]; 
       x = x -m; 
      } 
      else if ([[HistDirections objectAtIndex:i] intValue] ==3) 
      { 
       [path addLineToPoint:CGPointMake(x+m, y)]; 
       x = x+m; 
      } 
      else 
      { 
       [path addLineToPoint:CGPointMake(x, y+m)]; 
       y = y - m; 
      } 
     [kpath appendPath:path]; 
    } 
    i++; 
} 
[CATransaction begin]; 
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
[CATransaction setCompletionBlock:^{ 
    UIImageView *viewpulse = [[UIImageView alloc] initWithFrame:CGRectMake(x -5, y-5, 10.0, 10.0)]; 
    viewpulse.image = [UIImage imageNamed:@"arro.png"]; 
    viewpulse.backgroundColor = [UIColor clearColor]; 
    if(direction == 1) 
    { 
     viewpulse.transform = CGAffineTransformMakeRotation(-M_PI/2); 
    } 
    else if (direction == 2) 
    { 
     viewpulse.transform = CGAffineTransformMakeRotation(M_PI); 
    } 
    else if (direction == 4) 
    { 
     viewpulse.transform = CGAffineTransformMakeRotation(M_PI/2); 
    } 
    [mymapview addSubview:viewpulse]; 
    CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
    scaleAnimation.duration = 0.8; 
    scaleAnimation.repeatCount = HUGE_VAL; 
    scaleAnimation.autoreverses = YES; 
    scaleAnimation.fromValue = [NSNumber numberWithFloat:1.6]; 
    scaleAnimation.toValue = [NSNumber numberWithFloat:0.8]; 
    [viewpulse.layer addAnimation:scaleAnimation forKey:@"scale"]; 
}]; 
CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 

kpath.lineCapStyle = kCGLineCapRound; 
kpath.lineCapStyle = kCGLineJoinRound; 

shapeLayer.path = [kpath CGPath]; 

shapeLayer.strokeColor = [[UIColor colorWithRed:51/255.0f green:(51)/255.0f blue:170/255.0f alpha:1.0f] CGColor]; 
shapeLayer.lineWidth = 4.0; 
shapeLayer.lineCap = kCALineCapRound; 
shapeLayer.fillColor = [[UIColor clearColor] CGColor]; 
[mymapview.layer addSublayer:shapeLayer]; 

CABasicAnimation *HAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
float dur = (HistDirections.count * 0.27); 
if (dur > 2) 
{ 
    dur = 2; 
} 
HAnimation.duration   = dur; 
HAnimation.repeatCount   = 1.0; 
HAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; 
HAnimation.toValue = [NSNumber numberWithFloat:1.0f]; 



/* 
CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = mymapview.frame; 
gradientLayer.colors = @[(__bridge id)[UIColor blueColor].CGColor,(__bridge id)[UIColor greenColor].CGColor,(__bridge id)[UIColor yellowColor].CGColor,(__bridge id)[UIColor orangeColor].CGColor, (__bridge id)[UIColor redColor].CGColor]; 
gradientLayer.startPoint = CGPointMake(0,0.5); 
gradientLayer.endPoint = CGPointMake(1,0.5); 

[mymapview.layer addSublayer:gradientLayer]; 
gradientLayer.mask = shapeLayer;*/ 
[CATransaction commit]; 

Gradient маска:

MONOCOLOR линия:

ответ

1

Nevermind! Я понял, что я могу сделать. Поскольку я создаю слой из нескольких путей, я просто помещаю cgpaths в массив и зациклировал каждый путь в уникальный кассовый аппарат с собственным цветом

Смежные вопросы