こんにちは!
カメラアプリを作成しているのですが、既存のカメラアプリに実装されている枠線と矢印みたいな機能は
どうすればつけることができますか?
↓こんなの
指で拡大縮小もできるけど、ボタンでもすいすい拡大縮小回転なんでもできるような
機能をぜひつけたいと思っているので、教えてください!
よろしくお願いします!
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アプリ開発の授業をベースに作ってます!
全部説明するのは難しいので、途中まで書いたコードを追記していただけますでしょうか。
あなたの回答
tips
プレビュー