Я получаю сообщение об ошибке BAD ACCESS при использовании [UIBezierPath CGPath]
с CAShapeLayer
в ARC. Я пробовал соединять различными способами, но я не уверен, что проблема в этом. Я изолировал сбой, используя результат метода makeToPath
:
maskLayer = [CAShapeLayer layer];
maskLayer.path = [self makeToPath];
Но это не сбой:
maskLayer = [CAShapeLayer layer];
maskLayer.path = [self makeFromPath];
Что-то не так с путем, созданным makeToPath
? Я планирую использовать пути from и to с CABasicAnimation
, как только решу этот сбой. Каково правильное соединение ARC для CGPathRef
s от UIBezierPath
?
-(CGPathRef)makeToPath
{
UIBezierPath* triangle = [UIBezierPath bezierPath];
[triangle moveToPoint:CGPointZero];
[triangle addLineToPoint:CGPointMake(self.view.frame.size.width,0)];
[triangle addLineToPoint:CGPointMake(0, self.view.frame.size.height)];
[triangle closePath];
return [triangle CGPath];
}
-(CGPathRef)makeFromPath
{
UIBezierPath*rect = [UIBezierPath bezierPathWithRect:self.view.frame];
return [rect CGPath];
}
ОБНОВЛЕНИЕ Итак, я изменил свой файл .h в соответствии с ответом ниже, но я все еще получаю сбой
-(CGPathRef)makeToPath CF_RETURNS_RETAINED;
-(CGPathRef)makeFromPath CF_RETURNS_RETAINED;
Я также попытался заставить мои методы возвращать экземпляр UIBezierPath
согласно ответу здесь (показано ниже). До сих пор нет успеха. Кто-нибудь хочет дать мне подробное объяснение того, как это исправить?
maskLayer.path = [[self makeToPath] CGPath];// CRASHES
morph.toValue = CFBridgingRelease([[self makeToPath] CGPath]);// CRASHES
-(UIBezierPath*)makeToPath
{
UIBezierPath* triangle = [UIBezierPath bezierPath];
[triangle moveToPoint:CGPointZero];
[triangle addLineToPoint:CGPointMake(self.view.frame.size.width,0)];
[triangle addLineToPoint:CGPointMake(0, self.view.frame.size.height)];
[triangle closePath];
return triangle;
}
makeToPath
возвращаетUIBezierPath *
, а затем все время используюmaskLayer.path = [[self makeToPath] CGPath];
. Но я также сразу используюmaskLayer
, например.[self.view.layer addSublayer:maskLayer]
. Что вы делаете сmaskLayer
после установкиpath
? Вы можете показать нам? - person Rob   schedule 23.01.2013nap debugger
, и теперь он работает. - person spring   schedule 23.01.2013