Day6 - CoreLocation,CATransition

作者: Codepgq | 来源:发表于2016-09-10 10:45 被阅读51次

    效果图:压缩很厉害

    效果图

    <br />


    本来是这样子的

    <br />

    1、UI:ImageView、VisualEffectView、Button、Label

    布局如下

    UI比较简单,不做介绍

    1.1按钮布局,

    • 1.创建一个类,继承与UIButton

    • 2.重写layoutSubviews

    override func layoutSubviews() {
            super.layoutSubviews()
            self.imageView?.frame = self.bounds
            self.titleLabel?.removeFromSuperview()
            self.titleLabel?.frame = self.bounds
            self.titleLabel?.textAlignment = NSTextAlignment.Center
            self.insertSubview(self.titleLabel!, aboveSubview: self.imageView!)
        }
    

    <br />
    <br />

    2、定位、闭包、动画

    <br />

    2.1 定位、闭包

    • 1 创建一个类,继承:ViewController
    • 2 import CoreLocatioin
    • 3 定义一个CLLocationManager对象
    • 4 写一个方法,用于开启定位
    • 5 监听回调
    • 6 解析并返回
    import UIKit
    import CoreLocation
    
    /*
     
     plist文件里面加上
     NSLocationAlwaysUsageDescription string 你在这里写的内容会提示在弹窗中
     NSLocationWhenInUseUsageDescription string 你在这里写的内容会提示在弹窗中
     **/
    
    //闭包定义
    typealias feedBackBlock = (message : String) -> ()
    
    class LocationViewController: UIViewController , CLLocationManagerDelegate{
        
        var locationManager :CLLocationManager!
        var block = feedBackBlock?()
        var timer : NSTimer?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
        }
        
        func startLocation(feedBack :feedBackBlock){
            block = feedBack
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
            
            //模拟定位获取成功
    //        timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(self.send), userInfo: nil, repeats: true)
        }
        
        func send(){
            timer?.invalidate()
            timer = nil
            block!(message: "来自遥远的国度,手机可获得真实位置")
        }
        
        func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
            print(error)
        }
        
        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)->Void in
                
                self.locationManager.stopUpdatingLocation()
                
                if (error != nil) {
                    print("Reverse geocoder failed with error" + error!.localizedDescription)
                    return
                }
                if placemarks!.count > 0 {
                    let pm = placemarks![0]
                    self.displayLocationInfo(pm)
                } else {
                    print("Problem with the data received from geocoder")
                }
            })
        }
        
        func displayLocationInfo(placemark: CLPlacemark?) {
            if let containsPlacemark = placemark {
                if block != nil {
                    self.block!(message: containsPlacemark.name!)
                }
            }
            
        }
    }
    

    2.2 动画

    • 1 把imageView、button、label拖线到ViewController中
    • 2 在button的点击事件调用开始定位的方法
    startLocation { ( message) in
                print(message)
                self.address.text = message
                
                let cat = CATransition();
                cat.type = "cube"
                cat.duration = 1
                self.address.layer.addAnimation(cat, forKey: nil)
            }
    
    • 3 重写touchesBegan
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            super.touchesBegan(touches, withEvent: event)
            
            let cat = CATransition();
            cat.type = "rippleEffect"
            cat.duration = 1
            view.layer.addAnimation(cat, forKey: nil)
            
            changeBackgroundImage()
        }
        
    var item : Int = 1
        func changeBackgroundImage(){
            item += 1
            if item > 6 {
                item = 1
            }
            
            backgroundImage.image = UIImage(named: "c\(item).jpg")
        }
    

    <br />
    <br />

    简单的介绍一下CATransition

    type:动画类型:

    kCATransitionFade 交叉淡化过渡
    kCATransitionMoveIn 新视图移到旧视图上面
    kCATransitionPush 新视图把旧视图推出去
    kCATransitionReveal 将旧视图移开,显示下面的新视图
    pageCurl 向上翻一页
    pageUnCurl 向下翻一页
    rippleEffect 滴水效果
    suckEffect 收缩效果,如一块布被抽走
    cube 立方体效果
    oglFlip 上下翻转效果

    3 duration:动画时长
    4 timingFunction:动画执行(先快后慢,先慢后快……)
    5 subType:方向(fromLeft, fromRight, fromTop ,fromBottom)
    6 startProgress:开始点 0-1取值
    7 endProgress:结束点 0-1取值

    OK,到这里功能就完成了,如果项目有需要的时候,就可以把自己创建的ViewController拿走,让后页面中继承他,就可以使用获取定位的方法了

    <br /><br /><br />

    Demo - Location

    相关文章

      网友评论

        本文标题:Day6 - CoreLocation,CATransition

        本文链接:https://www.haomeiwen.com/subject/zseyettx.html