2017-01-19 14 views
0

次のコードを使用して、CALayerを使用してビデオに画像を追加しています。しかし、私が直面している問題は、別のビデオ解像度を選択すると透かしのサイズと位置が変わることです。私はユーザーがステッカーを選択し、その場所とサイズを調整することで、ビデオに追加するスナップチャットのようなアプリケーションを作成しています。iosでビデオの画像の位置が変更される

誰も私にここで間違いを教えてもらえますか?これが適切になるように今何をすべきか?前もって感謝します!

let aLayer = CALayer() 
    aLayer.contents = image.cgImage 

    aLayer.opacity = 1.0 
    //sorts the layer in proper order 
    let videoTrack: AVAssetTrack? = videoAsset.tracks(withMediaType: AVMediaTypeVideo)[0] 
    let videoSize: CGSize? = videoTrack?.naturalSize 
    let parentLayer = CALayer() 
    let videoLayer = CALayer() 

    let videoScale : CGFloat = CGFloat((videoSize?.width)!)/CGFloat(self.containerView.frame.width) 

    print("sticker frame \((stickerImageView?.frame.width)! * videoScale) \((stickerImageView?.frame.height)! * videoScale)") 

    aLayer.frame = CGRect(x: (stickerImageView?.frame.origin.x)! * videoScale ,y: (stickerImageView?.frame.origin.y)! * videoScale , width: (stickerImageView?.frame.width)! * videoScale , height : (stickerImageView?.frame.height)! * videoScale) 


    parentLayer.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat((videoSize?.width)!), height: CGFloat((videoSize?.height)!)) 
    videoLayer.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat((videoSize?.width)!), height: CGFloat((videoSize?.height)!)) 
    parentLayer.addSublayer(videoLayer) 
    parentLayer.addSublayer(aLayer) 

答えて

0

ビデオサイズのパーセンテージとしてイメージのサイズを定義する必要があります。今あなたの画像サイズは一定です。たとえば、画像が100x100で動画が300x200の場合、画像は動画の幅の3分の1と高さの半分をカバーします。同じ画像を1080x720のような大きな動画に適用すると、画像は動画の幅と高さの約10%になります。

計算しているスケールは、ビデオとそのコンテナの関係です。実際のビデオサイズに基づいて計算する必要があります。

+0

このアプローチを使用してx、幅、高さを得ることができましたが、現在はYが正しく表示されません。どうすれば助かりますか? –

+0

@AkshaykumarMaldhure何がYであるべきですか? –

+0

UIImageフレームyである必要があります。これは、ユーザーがビデオにどのように保持しているかを示します。 Xポジションが正しく機能している場合、Yは常に同様に画像位置を変更することができます。 –

関連する問題