2

iOS 5.0 で CGPathCreateCopyByStrokingPath を使用すると非常に便利であることがわかりましたが、iOS 5 以降で使用できます。

iOS 4 で同じパスをコピーする簡単な方法はありますか?

4

2 に答える 2

3

これは、IOS5 と IOS4+ の間で互換性があります。同じ塗りと線の色を使用すると、100% 機能します。Appleのドキュメントはこれについて少し怪しげです - 彼らは「あなたがそれを埋めるならうまくいく」と言っています. YMMV。

// pathFrameRange: you have to provide something "at least big enough to 
// hold the original path"

static inline CGPathRef CGPathCreateCopyByStrokingPathAllVersionsOfIOS( CGPathRef 
  incomingPathRef, CGSize pathFrameRange, const CGAffineTransform* transform,
  CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat miterLimit )
{
    CGPathRef result;

    if( CGPathCreateCopyByStrokingPath != NULL )
    {
        /**
        REQUIRES IOS5!!!
         */
        result = CGPathCreateCopyByStrokingPath( incomingPathRef, transform,
            lineWidth, lineCap, lineJoin, miterLimit);
    }
    else
    {
        CGSize sizeOfContext = pathFrameRange;
        UIGraphicsBeginImageContext( sizeOfContext );
        CGContextRef c = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(c, lineWidth);
        CGContextSetLineCap(c, lineCap);
        CGContextSetLineJoin(c, lineJoin);
        CGContextSetMiterLimit(c, miterLimit);
        CGContextAddPath(c, incomingPathRef);
        CGContextSetLineWidth(c, lineWidth);
        CGContextReplacePathWithStrokedPath(c);
        result = CGContextCopyPath(c);
        UIGraphicsEndImageContext();
    }
}
于 2012-03-18T16:33:33.300 に答える
1

うーん-これが「シンプル」であるかどうかはわかりませんが、このSO投稿でEdの方法を確認してください。

于 2011-11-16T23:26:19.590 に答える