ios - 我在将 uiview 当前位置设置为 uiview 默认位置时遇到问题?

标签 ios swift

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

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

调用函数“panHandler”

 // 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);

    }

如何解决这个问题,请告诉我

最佳答案

您需要将数据保留在磁盘上。

使用以下代码:

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 的更多信息:NSCoding , NSKeyedArchiver

关于ios - 我在将 uiview 当前位置设置为 uiview 默认位置时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42808318/

相关文章:

android - 将实时视频传输到 iOS 和 Android 的最即时方式

ios - Swift-无论哪个ViewController启动,在应用启动时都显示showingSplashView

ios - 如何通过 iOS 通知中心发送和接收 JSON?

ios - 如何访问扩展中的UIButton?

swift - CoreData 或 Outlet 集合的轻微泄漏

ios - 从后台计时器更新标签

iphone - iOS:加载时的设备方向

TableView 中的 iOS Swift 4 搜索栏

ios - TableView 不在 ViewController 中显示数据 : Swift

ios - 在 ios swift 的 pdfview 中没有获得 "menu"中的突出显示选项