2016-08-12 4 views
0

はじめCGPathにサイズ調整

私が持っているCGPath私はPocketSVG APIを使用してSVGファイルから作成します。それはすべて正常に動作します。

問題

問題は形状が何らかの理由で伸びるということで、青色が、それを無視してください、それが必要だけにすることですあなたにもっと見える(この絵に目を通してください私は達成するために何をしたいですか

Image 1 ターゲット

ClearColor)こと?私は画面の幅全体に行き渡る形を実現したい(私は高さに気をつけません、幅に応じてそれ自体を修正する必要があります)、画面の下部にくっついてください。この写真を見てくださいウェル(円形のボタンを無視してください):

Image 2

コード

重要な部分、私はSVGファイルからこの図形を描くUIViewのサブクラスを持って

)、それは0と呼ばれた。次に、私のMainViewControllerUIViewControllerのサブクラス)には、CategoriesBarViewのオブジェクトを作成し、これをプログラムでサブビューとして設定しています。

CategoriesBarView

class CategoriesBarView: UIView { 
    override func layoutSubviews() { 
     let myPath = PocketSVG.pathFromSVGFileNamed("CategoriesBar").takeUnretainedValue() 

     var transform = CGAffineTransformMakeScale(self.frame.size.width/750.0, self.frame.size.height/1334.0) 
     let transformedPath = CGPathCreateCopyByTransformingPath(myPath, &transform) 

     let myShapeLayer = CAShapeLayer() 
     myShapeLayer.path = transformedPath 

     let blur = UIBlurEffect(style: .Light) 
     let effectView = UIVisualEffectView(effect: blur) 
     effectView.frame.size = self.frame.size 
     effectView.frame.origin = CGPointMake(0, 0) 
     effectView.layer.mask = myShapeLayer 

     self.addSubview(effectView) 

    } 
} 

MainViewController

override func viewDidLoad() { 
    super.viewDidLoad() 

    let testHeight = UIScreen.mainScreen().bounds.size.height/6 // 1/6 of the screen’s height, that is the height in the target picture approximately, doesn’t it? 

    let categoriesBarView = CategoriesBarView(frame: CGRect(x: 0, y: UIScreen.mainScreen().bounds.size.height - testHeight , width: UIScreen.mainScreen().bounds.size.width, height: testHeight)) 
     categoriesBarView.backgroundColor = UIColor.blueColor() // AS I said, it should be ClearColor 
    self.view.addSubview(categoriesBarView) 
} 

あなたの誰もが、問題はここに、なぜ形状はそのように伸びているものである知っていますか?誰かがここで私を助けることができたら本当に感謝します。

ありがとうございました。

+0

あなたは画面解像度に応じてあなたのパスを拡張しようとしたことがありますか? –

+0

@DipenPanchasaraどういう意味ですか?どうやってやるの?コードで何を変更すればよいですか?ありがとうございました! –

+0

100x100でパスを描き、320x100で同じよ​​うに見えたい場合は、新しいエリアが実際のパスより3.2倍多く、パスのxポイントに3.2を掛けます。パスのシンプルなスケーリング –

答えて

1

100x100の正方形を描くコードを考えてみましょう。私がここで行ったことは、100x100をベースディメンションとして取ったものです(それぞれの比率やスケールのディメンションを計算しやすいため)。scaleWidthscaleHeightという変数を定義しています。スケールはで、100x100の正方形を描画することを意味します。0.50.75に変更すると、それぞれ50X75ピクセルの四角形が描画されます。スケールの幅と高さの差を明確に示す画像をそれぞれ1.00.50.75としてください。

CGFloat scaleWidth = 0.50f; 
CGFloat scaleHeight = 0.75f; 

//// Square Drawing 
UIBezierPath* bezierSquarePath = [UIBezierPath bezierPath]; 

// ***Starting point of path *** 
[bezierSquarePath moveToPoint: CGPointMake(1, 1)]; 

// *** move to x and y position to draw lines, calculate respective x & y position using scaleWidth & scaleHeight *** 
[bezierSquarePath addLineToPoint: CGPointMake(100*scaleWidth, 1)]; 
[bezierSquarePath addLineToPoint: CGPointMake(100*scaleWidth, 100*scaleHeight)]; 
[bezierSquarePath addLineToPoint: CGPointMake(1, 100*scaleHeight)]; 

// *** end your path *** 
[bezierSquarePath closePath]; 
[UIColor.blackColor setStroke]; 
bezierSquarePath.lineWidth = 1; 
[bezierSquarePath stroke]; 

画像1:scaleWidth = 1.0およびscaleHeight = 1を使用して100×100の正方形を表します。0 Represents 100x100 square using scaleWidth = 1.0 and scaleHeight = 1.0

画像2:scaleWidth = 0.50とScaleHeightの値を使用して、50x75の正方形を表し= 0.75 Represents 100x100 square using scaleWidth = 0.50 and scaleHeight = 0.75

注のみUIViewが可能であるように、所与の画像における全ての描画がUIView- (void)drawRect:(CGRect)rect方法で行われます描く。私はUIViewをImageにGrayColorで強調表示しています。

私は、あなたが同じコードを使用することはできないが、それを使用して生成することができるので、あなたの問題を解決するためのパスを拡大することについての視点を与えると信じています。

参考ツール:グラフィックスコーディングの熟練者でない場合は、PaintCode softwareを使用してUIでObjective-Cコードを生成することをお勧めします。あなたが選ぶことができる他のソフトウェアがあるかもしれないと思った。

ハッピーコーディング:)

関連する問題