2016-06-20 4 views
0

私は4つの色のうちの1つを使用して描画し、作業を共有/エクスポートできる単純なアプリケーションを開発中です。ブラシのサイズを変更するには、「設定」ビューを入力し、スライダを使って調整する必要があります。私が抱えている問題は、スライダの値がメインビューに戻ったときにブラシのサイズに影響を与えないということです。初期のブラシサイズを何に設定しても、スライダーを何度も何度も残しておくことができます。
違いがあれば、2つのビューはNavigationViewControllerによって管理されます。UISliderスライダーの値が保存されない

メイン/図面ビューコントローラ

import UIKit 

class DrawingViewController: UIViewController { 

@IBOutlet weak var imageView: UIImageView! 
@IBOutlet weak var buttonsStackView: UIStackView! 

var lastPoint = CGPoint.zero 
var red : CGFloat = 0.0 
var green : CGFloat = 0.0 
var blue : CGFloat = 0.0 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(DrawingViewController.appBecameActive), name: UIApplicationDidBecomeActiveNotification, object: nil) 

    blueTapped(UIButton()) 
} 

func appBecameActive() { 
    self.buttonsStackView.hidden = false 
} 

override func viewWillAppear(animated: Bool) { 
    self.navigationController?.navigationBarHidden = true 
    print("Current Brush Size: \(SettingsViewController().brushSize)") 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if let touch = touches.first { 
     let point = touch.locationInView(self.imageView) 
     self.lastPoint = point 
    } 

    self.buttonsStackView.hidden = true 
} 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if let touch = touches.first { 
     let point = touch.locationInView(self.imageView) 
     //print("Point: \(point)") 

     drawBetweenPoints(self.lastPoint, secondPoint: point) 

     self.lastPoint = point 
    } 

} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if let touch = touches.first { 
     let point = touch.locationInView(self.imageView) 
     //print(point) 

     drawBetweenPoints(self.lastPoint, secondPoint: point) 
    } 

    self.buttonsStackView.hidden = false 
} 

func drawBetweenPoints(firstPoint:CGPoint, secondPoint:CGPoint) { 
    UIGraphicsBeginImageContext(self.imageView.frame.size) 
    let context = UIGraphicsGetCurrentContext() 

    self.imageView.image?.drawInRect(CGRect(x: 0, y: 0, width: self.imageView.frame.size.width, height: self.imageView.frame.size.height)) 

    CGContextMoveToPoint(context, firstPoint.x, firstPoint.y) 
    CGContextAddLineToPoint(context, secondPoint.x, secondPoint.y) 

    //randomTapped(UIButton()) 
    CGContextSetRGBStrokeColor(context, self.red, self.green, self.blue, 1.0) 
    CGContextSetLineCap(context, .Round) 
    CGContextSetLineWidth(context, CGFloat(SettingsViewController().brushSize)) 

    CGContextStrokePath(context) 

    self.imageView.image = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 
} 

func eraseEasel() { 
    self.imageView.image = nil 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "drawingToSettingsSegue" { 
     let settingsVC = segue.destinationViewController as! SettingsViewController 
     settingsVC.drawingVC = self 
    } 
} 

@IBAction func blueTapped(sender: AnyObject) { 
    self.red = 56/255 
    self.green = 109/255 
    self.blue = 229/255 
} 
@IBAction func greenTapped(sender: AnyObject) { 
    self.red = 37/255 
    self.green = 235/255 
    self.blue = 114/255 
} 
@IBAction func redTapped(sender: AnyObject) { 
    self.red = 229/255 
    self.green = 56/255 
    self.blue = 56/255 
} 
@IBAction func yellowTapped(sender: AnyObject) { 
    self.red = 249/255 
    self.green = 215/255 
    self.blue = 23/255 
} 
@IBAction func randomTapped(sender: AnyObject) { 
    self.red = CGFloat(arc4random_uniform(255))/255 
    self.green = CGFloat(arc4random_uniform(255))/255 
    self.blue = CGFloat(arc4random_uniform(255))/255 
} 

} 


設定ビューコントローラ

import UIKit 

class SettingsViewController: UIViewController { 

weak var drawingVC : DrawingViewController? = nil 

@IBOutlet weak var brushSlider: UISlider! 

var brushSize : Float = 15 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 

    self.navigationController?.navigationBarHidden = false 
} 

override func viewWillAppear(animated: Bool) { 
    brushSlider.value = self.brushSize 
} 

@IBAction func eraseTapped(sender: AnyObject) { 
    self.drawingVC?.eraseEasel() 
    self.navigationController?.popViewControllerAnimated(true) 
} 

@IBAction func shareTapped(sender: AnyObject) { 
    if let image = drawingVC?.imageView.image { 
     let activityVC = UIActivityViewController(activityItems: [image], applicationActivities: nil) 
     self.presentViewController(activityVC, animated: true, completion: nil) 
    } 
} 

@IBAction func brushSlider(sender: AnyObject) { 
    self.brushSize = brushSlider.value 
    print(self.brushSize) 
} 

} 

答えて

1

あなたは常にデフォルト値で新しいブラシのサイズを、取得しています。

SettingsViewController().brushSize 

この行は、新しいSettingsViewControllerオブジェクトを作成し、使用する場合は15

であることからbrushSize値は、メインビューコントローラの上部にあるアウトレットを作成し、その1を使用しますアプリ実行の間に持続しないブラシサイズのインスタンス。

var settingsVC = SettingsViewController() 

その後、しかし、あなたがこれを行うた後も、あなたがストーリーボードからあなたSettingsViewControllerオブジェクトをインスタンス化している

settingsVC.brushSize 

SettingsViewController().brushSize 

のすべてを置き換えます。つまり、埋め込みセグメンテーションでない限り、設定ビューに進むまで、メインビューコントローラの上部に作成するものとは全く異なるインスタンスになります。あなたが最初のブラシサイズは常に15になりたい場合は、唯一の更新に使用すると、設定画面に行った後、あなたはあなたのprepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "drawingToSettingsSegue" { 
     let settingsVC = segue.destinationViewController as! SettingsViewController 
     settingsVC.drawingVC = self 
     self.settingsVC = settingsVC 
    } 
} 

幸運にあなたのローカル参照を設定することができ、うまくいけば、このことができます!

+0

ありがとうございました!これで問題は完全に修正されました:) – npburns224

関連する問題