ARC の下で使用[UIBezierPath CGPath]
すると、BAD ACCESS エラーが発生します。CAShapeLayer
さまざまな方法でブリッジングを試みましたが、それが問題かどうかはわかりません。makeToPath
メソッドの結果を使用してクラッシュを分離しました。
maskLayer = [CAShapeLayer layer];
maskLayer.path = [self makeToPath];
しかし、これはクラッシュしません:
maskLayer = [CAShapeLayer layer];
maskLayer.path = [self makeFromPath];
によって作成されたパスに何か問題がありますmakeToPath
か? このクラッシュを整理したら、 fromパスとtoパスを使用する予定です。から へのCABasicAnimation
正しい ARC ブリッジングは?CGPathRef
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;
}