質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • Swift

    9176questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

カメラアプリのスタンプ

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 661

T_PoiPoi

score 10

こんにちは!

カメラアプリを作成しているのですが、既存のカメラアプリに実装されている枠線と矢印みたいな機能は
どうすればつけることができますか?
↓こんなの
イメージ説明

指で拡大縮小もできるけど、ボタンでもすいすい拡大縮小回転なんでもできるような
機能をぜひつけたいと思っているので、教えてください!

よろしくお願いします!


2/19 16:43追記
>ikuwowさん 見てくださってありがとうございます!
表示する画面のコード

class ViewController: UIViewController {

 @IBOutlet var backImageView: UIImageView!
 var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    override func viewDidLoad() {
        super.viewDidLoad()    
        setImage()    
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

  /****ここでカメラロールで選んだ写真を表示!****/
    func setImage() {
        backImageView.image = selectImage
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
       /****ここでスタンプを表示!****/
        if appDelegate.isNewStampAdded == true {
            let stamp = appDelegate.stampArray.last!
            stamp.frame = CGRectMake(0, 0, 150, 150)
            stamp.center = canvasView.center
            stamp.userInteractionEnabled = true
            canvasView.addSubview(stamp)
            appDelegate.isNewStampAdded = false 
        }
    }
  /****スタンプを追加するためのボタン!****/
    @IBAction func stampTapped() {
        let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)

        alert.addAction(UIAlertAction(title: "スタンプを追加", style: .Default) { action in

                let ss = self.storyboard?.instantiateViewControllerWithIdentifier("StampSelectTab") as! SelectTabViewController
                ss.modalTransitionStyle = UIModalTransitionStyle.CoverVertical
                self.presentViewController(ss, animated: true, completion: nil)

        })

        alert.addAction(UIAlertAction(title: "フレームを追加", style: .Default) { action in
            //実装予定!いつかフレームも追加したい!
        })

        alert.addAction(
            UIAlertAction(title: "キャンセル", style: UIAlertActionStyle.Cancel, handler: nil)
        )

        presentViewController(alert, animated: true, completion: nil)

    }
}


スタンプを動かしているコード

class Stamp: UIImageView, UIGestureRecognizerDelegate {

    var currentTransform: CGAffineTransform!
    var scale: CGFloat = 1.0
    var angle: CGFloat = 0
    var isMoving: Bool = false

    override func didMoveToSuperview() {
        let rotationRecognizer: UIRotationGestureRecognizer = UIRotationGestureRecognizer(target: self, action: "rotationGesture:")
        rotationRecognizer.delegate = self
        self.addGestureRecognizer(rotationRecognizer)

        let pinchRecognizer: UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: "pinchGesture:")
        pinchRecognizer.delegate = self
        self.addGestureRecognizer(pinchRecognizer)
    }

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

    func rotationGesture(gesture: UIRotationGestureRecognizer) {
        if !isMoving && gesture.state == UIGestureRecognizerState.Began {
            isMoving = true
            currentTransform = self.transform
        } else if isMoving && gesture.state == UIGestureRecognizerState.Ended {
            isMoving = false
            scale = 1.0
            angle = 0.0
        }

        angle = gesture.rotation

        let transform = CGAffineTransformConcat(CGAffineTransformConcat(currentTransform, CGAffineTransformMakeRotation(angle)), CGAffineTransformMakeScale(scale, scale))

        self.transform = transform
    }

    func pinchGesture(gesture: UIPinchGestureRecognizer) {
        if !isMoving && gesture.state == UIGestureRecognizerState.Began {
            isMoving = true
            currentTransform = self.transform
        } else if isMoving && gesture.state == UIGestureRecognizerState.Ended {
            isMoving = false
            scale = 1.0
            angle = 0.0
        }

        scale = gesture.scale

        let transform = CGAffineTransformConcat(CGAffineTransformConcat(currentTransform, CGAffineTransformMakeRotation(angle)), CGAffineTransformMakeScale(scale, scale))

        self.transform = transform;
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.bringSubviewToFront(self)
        /****動かしたら枠線を表示!****/
        self.layer.borderWidth = 2.0
        self.layer.borderColor = UIColor.redColor().CGColor

    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let touch = touches.first!

        let dx = touch.locationInView(self.superview).x - touch.previousLocationInView(self.superview).x
        let dy = touch.locationInView(self.superview).y - touch.previousLocationInView(self.superview).y

        self.center = CGPointMake(self.center.x + dx, self.center.y + dy)

        self.layer.borderWidth = 2.0

    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        /*****保存のときに邪魔だからイベントが終わったら消す!****/
        self.layer.borderWidth = 0.0
        self.layer.borderColor = UIColor.clearColor().CGColor

    }

}


世界一受けたいiPhoneアプリ開発の授業をベースに作ってます!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • ikuwow

    2016/02/19 16:24

    全部説明するのは難しいので、途中まで書いたコードを追記していただけますでしょうか。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Swift

    9176questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています