加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

30天学习Swift项目实战第四天------滑动菜单(UIScrollView)

发布时间:2020-12-14 06:48:52 所属栏目:百科 来源:网络整理
导读:注意:项目分为3个界面,中间的界面使用了摄像头,模拟器是不能完成的。 源码分为4个文件: ViewController.swift: // // ViewController.swift // SlideMenu // // Created by luopan on 16/8/5. // Copyright ? 2016年 Hust University. All rights reserv

注意:项目分为3个界面,中间的界面使用了摄像头,模拟器是不能完成的。 源码分为4个文件: ViewController.swift: // // ViewController.swift // SlideMenu // // Created by luopan on 16/8/5. // Copyright ? 2016年 Hust University. All rights reserved. //

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    UIApplication.sharedApplication().statusBarHidden = true
    
    let leftView: LeftView = LeftView(nibName: "LeftView",bundle: nil)
    let centerView: CameraView = CameraView(nibName: "CameraView",bundle: nil)
    let rightView: RightView = RightView(nibName: "RightView",bundle: nil)
    
    
    self.addChildViewController(leftView)
    self.scrollView.addSubview(leftView.view)
    leftView.didMoveToParentViewController(self)
    
    self.addChildViewController(rightView)
    self.scrollView.addSubview(rightView.view)
    rightView.didMoveToParentViewController(self)
    
    self.addChildViewController(centerView)
    self.scrollView.addSubview(centerView.view)
    centerView.didMoveToParentViewController(self)
    
    var centerViewFrame: CGRect = centerView.view.frame
    centerViewFrame.origin.x = self.view.frame.width
    centerView.view.frame = centerViewFrame
    
    var rightViewFrame: CGRect = rightView.view.frame
    rightViewFrame.origin.x = 2 * self.view.frame.width
    rightView.view.frame = rightViewFrame
    
    
    self.scrollView.contentSize = CGSizeMake(self.view.frame.width * 3,self.view.frame.size.height)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

LeftView: // // LeftView.swift // SlideMenu // // Created by luopan on 16/8/5. // Copyright ? 2016年 Hust University. All rights reserved. //

import UIKit

class LeftView: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    //Status Bar 给隐藏了
    UIApplication.sharedApplication().statusBarHidden = true
    
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application,you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

RightView: // // RightView.swift // SlideMenu // // Created by luopan on 16/8/5. // Copyright ? 2016年 Hust University. All rights reserved. //

import UIKit

class RightView: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    //Status Bar 给隐藏了
    UIApplication.sharedApplication().statusBarHidden = true

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application,sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

CameraView: // // CameraView.swift // SlideMenu // // Created by luopan on 16/8/5. // Copyright ? 2016年 Hust University. All rights reserved. //

import UIKit //导入照相机框架 import AVFoundation

class CameraView: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate{

@IBOutlet weak var cameraView: UIView!
@IBOutlet weak var tempImageView: UIImageView!

//有关照相机的变量
var captureSession : AVCaptureSession?
var stillImageOutput : AVCaptureStillImageOutput?
var previewLayer : AVCaptureVideoPreviewLayer?

override func viewDidLoad() {
    super.viewDidLoad()
    //去掉状态栏
    UIApplication.sharedApplication().statusBarHidden = true
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    
    previewLayer?.frame = cameraView.bounds
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    
    captureSession = AVCaptureSession()
    captureSession?.sessionPreset = AVCaptureSessionPreset1280x720
    
    let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    var error : NSError?
    var input: AVCaptureDeviceInput!
    
    do {
        input = try AVCaptureDeviceInput(device: backCamera) }
    catch let error1 as NSError {
        error = error1
        input = nil
    }
    
    if (error == nil && captureSession?.canAddInput(input) != nil) {
        
        captureSession?.addInput(input)
        
        stillImageOutput = AVCaptureStillImageOutput()
        stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]
        
        if (captureSession?.canAddOutput(stillImageOutput) != nil) {
            captureSession?.addOutput(stillImageOutput)
            
            previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
            previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
            previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
            cameraView.layer.addSublayer(previewLayer!)
            captureSession?.startRunning()
        }
        
    }
    
}

func didPressTakePhoto(){
    
    if let videoConnection = stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
        videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
        stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection,completionHandler: {
            (sampleBuffer,error) in
            
            if sampleBuffer != nil {
                
                
                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                let dataProvider  = CGDataProviderCreateWithCFData(imageData)
                let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider,nil,true,CGColorRenderingIntent.RenderingIntentDefault)
                
                let image = UIImage(CGImage: cgImageRef!,scale: 1.0,orientation: UIImageOrientation.Right)
                
                self.tempImageView.image = image
                self.tempImageView.hidden = false
                
            }
            
            
        })
    }
    
    
}


var didTakePhoto = Bool()

func didPressTakeAnother(){
    if didTakePhoto == true{
        tempImageView.hidden = true
        didTakePhoto = false
        
    }
    else{
        captureSession?.startRunning()
        didTakePhoto = true
        didPressTakePhoto()
        
    }
    
}

override func touchesBegan(touches: Set<UITouch>,withEvent event: UIEvent?) {
    didPressTakeAnother()
}

}

最后,我们有四个界面设计的文件。UIImageView是没有用户交互功能是的,但是可以用一个UIView来覆盖并设置用户交互属性就可以达到效果。

注意:所有的源码都可以找QQ是709165253的人要。 索要源码的时候,最好说明是在开源中国看到的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读