Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios I';我在将uiview当前位置设置为uiview默认位置时面临问题?_Ios_Swift - Fatal编程技术网

Ios I';我在将uiview当前位置设置为uiview默认位置时面临问题?

Ios I';我在将uiview当前位置设置为uiview默认位置时面临问题?,ios,swift,Ios,Swift,我在将uiview当前位置设置为uiview默认位置时遇到问题,请帮助。我使用的是imageoutletshoefront.bounds.origin=self.imageoutletshoefront.bounds.origin let panGestureRecognizer = UIPanGestureRecognizer(target:self, action: "panHandler:"); imageviewUIviewOutlet.addGestureRecognizer(

我在将
uiview
当前位置设置为
uiview
默认位置时遇到问题,请帮助。我使用的是
imageoutletshoefront.bounds.origin=self.imageoutletshoefront.bounds.origin

let panGestureRecognizer = UIPanGestureRecognizer(target:self, action: "panHandler:");
    imageviewUIviewOutlet.addGestureRecognizer(panGestureRecognizer);
调用函数“panHandler”

//平移手势处理程序
func panHandler(识别器:UIPanGestureRecognizer){
让translation=recognizer.translationView(imageviewUIviewOutlet);
func滑块已更改(发送方:UISlider){
//使用滑块中的值进行某些操作
打印(SliderMaximizeAdminimize.value)
如果(SliderMaximizeAdminimize.value>1&&SliderMaximizeAdminimize.value<3)
{
变量值=(sliderMaximizeAdminimize.value)为?CGFloat
self.imageviewUIviewOutlet.transform=CGAffineTransformMakeScale(值,值!)
imageoutletshoefront.transform=CGAffineTransformMakeScale(值!值!)
}
}
recognizer.view!.center=CGPoint(x:recognizer.view!.center.x+translation.x,y:recognizer.view!.center.y+translation.y);
setTranslation(CGPointZero,inView:view);
}

如何解决此问题请告诉我您需要将数据保存在磁盘上

使用以下代码:

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)
    }
}

您可以在此处阅读有关
NSCoding
NSKeyedArchiver
的更多信息:,

您希望发生什么?你看到了什么结果?您的代码实际上是说将原点设置为其当前值。什么都不会改变,那么如何将更新后的位置设置为视图的默认位置。假设我已经运行了我的项目,我的视图位置是(0,0),然后我拖动视图,现在位置是(45,45)id,我按下另一个选项卡并返回到上一个视图视图视图原点没有更改为我的拖动位置。请提供解决方案,如果你知道任何。谢谢。@NaumanYaqub我要看更多你的代码。发布一些代码示例。
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)
    }
}