2017-03-15 19 views
0

我面臨的問題在設置uiview當前位置uiview默認位置請幫助。我正在使用imageoutletshoefront.bounds.origin = self.imageoutletshoefront.bounds.origin我在將uiview當前位置設置爲uiview默認位置時遇到問題?

let panGestureRecognizer = UIPanGestureRecognizer(target:self, action: "panHandler:"); 
    imageviewUIviewOutlet.addGestureRecognizer(panGestureRecognizer); 

調用功能「乞丐」

// Pan gesture handler 

func panHandler(recognizer:UIPanGestureRecognizer){ 
     let translation = recognizer.translationInView(imageviewUIviewOutlet); 
     func sliderChanged(sender: UISlider) { 
      //Use the value from the slider for something 
      print(sliderMaximizeAndMinimize.value) 

      if (sliderMaximizeAndMinimize.value > 1 && sliderMaximizeAndMinimize.value < 3) 
      { 
       var value = (sliderMaximizeAndMinimize.value) as? CGFloat 
       self.imageviewUIviewOutlet.transform = CGAffineTransformMakeScale(value! , value!) 
       imageoutletshoefront.transform = CGAffineTransformMakeScale(value!, value!) 
      } 
     } 
     recognizer.view!.center = CGPoint(x: recognizer.view!.center.x + translation.x, y: recognizer.view!.center.y + translation.y); 
     recognizer.setTranslation(CGPointZero, inView: view); 

    } 

我怎麼能解決這個問題,請讓我知道

+0

什麼是你期待發生什麼?你看到了什麼結果?你的代碼實際上是說將原點設置爲當前值_。沒有什麼會改變 –

回答

0

您需要堅持在磁盤上的數據。

使用下面的代碼:

import UIKit 
import Foundation 

struct codingKeys { 
    static let finalPoint = "defaultPoint" 
} 

class ViewController: UIViewController{ 

    var defaultPoint = CGPoint.zero 
    @IBOutlet weak var myView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let pan = UIPanGestureRecognizer(target: self, action: #selector(didPan)) 
     myView.addGestureRecognizer(pan) 
     setDefaultPosition() 

    } 


    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     setDefaultPosition() 
    } 


    func setDefaultPosition(){ 
     if doesPersistentPositionURLExist(){ 
      myView.center = getDefaultPosition() 
      self.view.layoutIfNeeded() 
     } 

    } 

    func getPersistentPositionURL() -> URL{ 
     let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
     let defaultPositionURL = documentsDirectory.appendingPathComponent("defaultPosition") 
     print(defaultPositionURL) 
     return defaultPositionURL 
    } 

    func doesPersistentPositionURLExist() -> Bool{ 
     let path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("defaultPosition").path 
     if FileManager.default.fileExists(atPath: path){ 
      return true 
     } else { 
      return false 
     } 
    } 

    func persistDefaultPosition(){ 
     let data = NSMutableData() 
     let archiver = NSKeyedArchiver(forWritingWith: data) 
     archiver.encode(defaultPoint, forKey: codingKeys.finalPoint) 
     archiver.finishEncoding() 
     data.write(to: getPersistentPositionURL(), atomically: true) 
    } 

    func getDefaultPosition() -> CGPoint{ 
     let url = getPersistentPositionURL() 
     if let data = try? Data(contentsOf: url){ 
      let unarchiver = NSKeyedUnarchiver(forReadingWith: data) 
      let point = unarchiver.decodeCGPoint(forKey: codingKeys.finalPoint) 
      unarchiver.finishDecoding() 
      return point 
     } else { 
      return CGPoint.zero 
     } 
    } 

    func didPan(_ sender: UIPanGestureRecognizer){ 
     let translation = sender.translation(in: self.view) 
     let finalX = myView.center.x + translation.x 
     let finalY = myView.center.y + translation.y 
     defaultPoint = CGPoint(x: finalX, y: finalY) 
     myView.center = CGPoint(x: finalX, y: finalY) 
     view.layoutIfNeeded() 
     persistDefaultPosition() 
     sender.setTranslation(CGPoint.zero, in: self.view) 
    } 
} 

你可以閱讀更多關於NSCodingNSKeyedArchiver這裏:NSCodingNSKeyedArchiver

+0

那麼我如何設置我的更新位置作爲我的視圖的默認位置。假設我已經運行我的項目我的視圖位置是(0,0),然後我拖動視圖,現在位置是(45,45)ID我按另一個選項卡,並返回到以前的視圖視圖原點沒有改變到我的拖動位置。請提供解決方案,如果你知道任何。謝謝。 –

+0

@NaumanYaqub我必須看到更多的代碼。發佈一些代碼示例。 –