2014-01-25 2 views
0

Я пытаюсь изменить путь моего CAShapeLayer, а затем перерисовывать его с помощью setNeedsDisplay,setNeedsDisplay на CAShapeLayer для того, чтобы перерисовать слой

Но по какой-то причине он не будет перерисовывать. Единственный способ, которым я могу его перерисовать, - это позвонить viewDidLoad, который, я уверен, не правильный путь.

Вот код для инициализации:

self.shape.lineWidth = 2.0; 
[self.shape setFillColor:[[UIColor clearColor] CGColor]]; 
self.shape.strokeColor = [[UIColor blackColor] CGColor]; 
[self.shape setPath:[self.shapePath CGPath]]; 
self.shape.fillRule = kCAFillModeRemoved; 
[self.cuttingView.layer addSublayer:self.shape]; 

И жест распознавань для жеста перетаскивания:

- (void)handlePan:(UIPanGestureRecognizer *)gesture 
{ 
    static CGPoint lastLocation; 
    CGPoint location = [gesture locationInView:self.cuttingView]; 

    if (gesture.state == UIGestureRecognizerStateBegan) 
    { 
     if (![self.shapePath containsPoint:location]) { 
      gesture.enabled = NO; 
     } else { 
      lastLocation = location; 
     } 
    } 

    if (gesture.state == UIGestureRecognizerStateChanged) { 
     CGAffineTransform translation = CGAffineTransformMakeTranslation((location.x - lastLocation.x), (location.y - lastLocation.y)); 
     self.shapePath.CGPath = CGPathCreateCopyByTransformingPath(self.shapePath.CGPath, &translation); 
     [self.shape setNeedsDisplay]; 
    } 
    gesture.enabled = YES; 
} 

Я печать места, и они действительно изменяются, но на экране ничего не показывает ,

Как это можно исправить?

Спасибо!

ответ

2

Вы меняете self.shapePath.CGPath, но вы не меняете путь в CAShapeLayer.

Вместо [self.shape setNeedsDisplay], сделать это снова:

[self.shape setPath:[self.shapePath CGPath]]; 
1

вы не назначите путь к слою. Я бы удалил переменную shapePath, поскольку она не используется (AFAICS)

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