2

主な機能は次のとおりです。1) 写真を追加する/写真を撮る 2) 写真に絵文字を追加する 3) ズーム、回転、絵文字をドラッグして写真を飾る 4) Instagram で共有する。

絵文字は、回転、ズーム、およびドラッグできます。これらの関数は、UIRoationGestrueRecognizer、UIPinchGestureRecognizer、UIPanGesstureRecognizer などの UIGestureRecognizer を使用して実装しました。

現在、ユーザーが2本の指の間で絵文字を極端にズームイン/ズームアウトできる、スナップチャットのようなピンチズーム機能でアプリを更新しようとしています。現在のピンチ ジェスチャは、ユーザーの指が imageView (絵文字) にある場合にのみ機能します。

スナップチャットのようなピンチズームを行う方法のアイデア/サンプルコードはありますか? 以下のコードは、回転、ピンチ、およびドラッグをどのように処理したかです。前もって感謝します。

// UI Gesture Recognizers
@IBAction func handlePinch(recognizer : UIPinchGestureRecognizer) {
    if(deleteMode) {
        return
    }
    if let view = recognizer.view {
        view.transform = CGAffineTransformScale(view.transform,
            recognizer.scale, recognizer.scale)
        recognizer.scale = 1
    }
}

@IBAction func handleRotate(recognizer : UIRotationGestureRecognizer) {
    if(deleteMode) {
        return
    }
    if let view = recognizer.view {
        view.transform = CGAffineTransformRotate(view.transform, recognizer.rotation)
        recognizer.rotation = 0
    }
}

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
    if(deleteMode) {
        return
    }
    let translation = recognizer.translationInView(self.view)
    var centerX: CGFloat!
    var centerY: CGFloat!

    if let view = recognizer.view {

        // limit the boundary - using backgroundPanel.frame.width, height, origin.x, origin.y
        if(view.center.x + translation.x < panelBackground.frame.origin.x) {
            centerX = view.center.x + translation.x + 10
        } else if(view.center.x > panelBackground.frame.size.width){
            centerX = view.center.x + translation.x - 10
        } else {
            centerX = view.center.x + translation.x
        }

        if(view.center.y < panelBackground.frame.origin.y - 60){
            // set y that I can use below
            centerY = view.center.y + translation.y + 10
        } else if(view.center.y > panelBackground.frame.size.height){
            centerY = view.center.y + translation.y - 10
        } else {
            centerY = view.center.y + translation.y
        }

        // set final position
        view.center = CGPoint(x:centerX,
            y:centerY)

        recognizer.setTranslation(CGPointZero, inView: self.view)

    }
}

@IBAction func handleLongPress(recognizer: UILongPressGestureRecognizer) {
    if(recognizer.state == UIGestureRecognizerState.Began) {
        if(!deleteMode) {
            print("LongPress - Delete Shows")
            for (_, stickers) in self.backgroundImage.subviews.enumerate() {
                for (_, deleteButtons) in stickers.subviews.enumerate() {
                    if let delete:UIImageView = deleteButtons as? UIImageView{
                        if(delete.accessibilityIdentifier == "delete") {
                            delete.alpha = 0.5
                        }
                    }
                }
            }
            deleteMode = true
        } else {
            deleteButtonHides()
        }
    }
}
4

2 に答える 2

1

また、スナップチャットのようにドラッグ、パン、ズームを同時に探していますが、ズームだけを探している場合。ピンチでズームするラベルに以下の関数を使用しています。スムーズではありませんが、ズーム作業を行います。

  func handlePinch(recognizer: UIPinchGestureRecognizer) {
    if let view = recognizer.view as? UILabel {
        let pinchScale: CGFloat = recognizer.scale
        view.transform = view.transform.scaledBy(x: pinchScale, y: pinchScale)
        recognizer.scale = 1.0
    }
}

ドラッグ、パン、ズームを同時に行うには、以下の投稿をチェックしてください。

ピンチ、ドラッグ、パンを同時に行う

于 2016-12-02T14:39:32.963 に答える