2016-05-04 12 views
0

私は高解像度の画像にパスを描こうとしていますが、それはiPhoneのためには複雑なことではありませんが、私のパスに影を付けるとすべてが遅れます。それは私が特定の解像度(2000 x 3000)の画像で作業する場合にのみ遅れます。

ストーリーボード VIEは、以下のとおりです。私は描画する必要がある場合Core Graphicsで高解像度画像を編集するには?

-Scroll View 
    -Image View 
    -Draw View 


は、だから私はImageViewの上にDrawingViewを持っています。
ImageViewとDrawView(view.bounds.size)は、画像と同じ解像度(例えば、2000 x 3000)(に問題があります。)です。
私は高解像度のビューを描画しています。

私はが直接drawRect:を呼び出すだけでいくつかの操作(path.moveToPointpath.addCurveToPoint、配列操作)を行うと、私の配列にポイントを追加した後touchesBegan()内部setNeedsDisplay()touchesMoved()を呼び出していませんよ。 drawRect:

私は基本的に持っている:

override func drawRect(rect: CGRect) { 
     print(self.bounds.size) 
     UIColor.greenColor().setStroke() 
     path.lineCapStyle = .Round 
     path.lineJoinStyle = .Round 
     path.lineWidth = 60.0 
     context = UIGraphicsGetCurrentContext()! 
     CGContextAddPath(context, path.CGPath) 
     CGContextSetShadowWithColor(context, CGSizeZero, 14.0, UIColor.whiteColor().CGColor) // <-- with this shadow it lags a lot. 
     path.stroke() 
    } 

私のパスがUIBezierPath()です。

スピードを上げるためのアイデアはありますか?

更新: @ブリムストンの説明に従った。 ImageViewの解像度は低くなっていますが、高解像度の画像に描画されたパスを適用する必要があります。

let layer = CAShapeLayer() 
    layer.path = path.CGPath 
    self.imageToEditView.layer.mask = layer 
    UIGraphicsBeginImageContext(self.imageEdited.size) 
    self.imageToEditView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    let croppedCGImage = CGImageCreateWithImageInRect(image.CGImage!, CGPathGetBoundingBox(path.CGPath)) 
    let croppedImage = UIImage(CGImage: croppedCGImage!) 
    self.imageToEditView.image = croppedImage 
    self.imageToEditView.layer.mask = nil 

imageToEditView.bounds.size =低解像度
imageEdited.size =高解像度 :
は、私はすでに私のクローズパスを持ってこのコードで
(私は、ユーザーが描くパスで画像をトリミング手にしようとしています)

私はrenderInContextのときに高解像度を設定する必要があります(私は思う)。しかし、どうすればimageViewの解像度を変更できますか?

答えて

1

ユーザーが引き継ぐようにサイズを小さくしてみてください(小さなiPhone画面では大きな違いはありません)。高解像度の画像に編集を適用します。

のいずれか、画像を縮小UIImagePNGRepresentationを使用し、(あなたはまだメモリの問題を抱えている場合)、あなたのイメージが十分に小さい、または作る可能性がある、それがさらに小さくしthis tutorialthis answerで技術を使用してみてください。

次に、描いた内容を取り出して、高解像度画像に適用することができます。

また、Appleが高解像度の最適化技術を見て:

+0

https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreensInViews/SupportingHiResScreensInViews.htmlが答えてくれてありがとう、私は金曜日にそれをチェックします。小さな解像度から高い解像度への私の描かれた内容を適用することができますか? – Danny182

+0

あなたのdrawViewがイメージビューとは別のものである場合は、ユーザーに何かを描画させ、描画したものを高解像度イメージに適用させることができます。低解像度画像については、それが背景にある場合は重要ではありません。 – brimstone

+0

高解像度画像にパスを適用する際に問題が発生します。私は答えを更新した – Danny182

関連する問題