2017-05-10 7 views
1

UIImageサイズに対してサブビューの起源を求める:これは階層である

-- ViewController.View P [width: 375, height: 667] 
---- UIImageView A  [width: 375, height: 667] 
         [A is holding an image of size(1287,1662)] 
---- UIImageView B  [width: 100, height: 100] 
         [B is holding an image of size(2400,982)] 

注:Bは、アプリでAのサブビューではない、Bはドラッグ可能です。そして私は位置がA [背景]とB [前景]の2つのAとBをマージしようとしています。

Bの正確な位置を見つけたいと思います。マージ後、ドラッグした位置と同じ位置になります。&が落とされました。

  1. ドラッグアンドドロップのすべてのコードを記述しました。 B.

    の初期位置を表示


    :私はここに

が問題のスクリーンショットですA.との合併のためにBの適切な位置を見つけることができませんでした

  • Showing the initial position of B.


    これはドラッグアンドドロップ後のBの新しい位置です。合流後のBの

    This is the new position of B.


    間違った位置。

    Wrong position of B after merging.

    任意の助けいただければ幸いです。

    ありがとうございます。

    注意! :添付画像スクリーンショットの後半にサンプルと署名がGoogle検索で作成されました。私はデモンストレーション目的でのみ使用しています。

  • +0

    あなたは、いくつかのコードを取得している結果何を、あなたはすでに試したかを示すことができます:

    は、ここでは、コードです。 – Scriptable

    +0

    @Scriptable、ありがとう。質問がスクリーンショットで更新されました。それは役に立つかもしれません。より多くの情報が必要な場合はお知らせください。 – Hemang

    +1

    イメージは実際のディスプレイよりも大きいので、スケーリングされています。それぞれの相対的な位置を計算するためのスケール係数を計算する必要があります。私は試して、それを行う方法を見ていくつかのサンプルコードをshorltyします。文字と署名のいずれかのソースイメージを提供できますか?または類似のサイズのもの – Scriptable

    答えて

    0

    imageViewのサイズが元の画像と異なるため、2つの画像を2つのビューの絶対位置でマージする代わりに、相対位置を使用できます。

    須藤コード:

    let relativeOrigin = {(B's origin.x in A)/A.width , (B's origin.y in A)/A.height} 
    let actualOrigin = { imgAWidth * relativeOrigin.x , imgAHeight * relativeOrigin.y } //this should be the correct absolute origin. 
    
    +0

    こんにちは、これはまだ私にBの間違った位置を与えているので、助けにはなりません。 – Hemang

    +0

    @Hemang、デモを作成してgithubに入れられますか? – Gocy015

    0

    あなたは提案としてそれを考慮することができます:

    FullscreenPoint.frame.origin.y = (screenShot.frame.origin.y*FullImage.frame.size.height)/screenShot.frame.size.height;       
    FullscreenPoint.frame.origin.x = (screenShot.frame.origin.x*FullImage.frame.size.width)/screenShot.frame.size.width; 
    
    +0

    これは役に立ちません。 – Hemang

    0

    私はImageViewのの(A)frame.sizeの代わりA.image.sizeを使用するために必要な合併中に正しい場所を取得します。

    func mixImagesWith(frontImage:UIImage?, backgroundImage: UIImage?, atPoint point:CGPoint, ofSize signatureSize:CGSize) -> UIImage { 
        let size = self.imgBackground.frame.size 
        //let size = self.imgBackground.image!.size 
        UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale) 
        backgroundImage?.draw(in: CGRect.init(x: 0, y: 0, width: size.width, height: size.height)) 
        frontImage?.draw(in: CGRect.init(x: point.x, y: point.y, width: signatureSize.width, height: signatureSize.height)) 
        let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
        UIGraphicsEndImageContext() 
        return newImage 
    }