【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记30 ScrollView Demo实战

简介:   在上一话中我们创建了一个通过URL读取图片的Demo,这个Demo是不能拖动和缩放的,现在给它增加选项让它可以手动切换URL,并把图片添加到ScrollView中。

  在上一话中我们创建了一个通过URL读取图片的Demo,这个Demo是不能拖动和缩放的,现在给它增加选项让它可以手动切换URL,并把图片添加到ScrollView中。

向Storyboard中拖入一个splitviewController。把ImageViewController作为detail视图,把工程中自带的那个viewcontroller作为rootview,现在storyboard中的场景如图:


现在运行一下:


点击back可以切换到主界面,目前这个界面是空的,我们需要向其中增加一些功能按钮。增加三个按钮分别获取模型中的三张图片,并且调整自动布局:



然后我们需要做的是建立过渡。

按住control键拖动按钮到ImageViewController,选择show detail segue,分别命名为fengjing1、fengjing2、fengjing3。在viewController中设置过渡方法:

import UIKit

class ViewController: UIViewController {

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let ivc = segue.destinationViewController as? ImageViewController,let identifier = segue.identifier{
            switch identifier{
            case "fengjing1":
                ivc.imageURL = DemoURL.Fengjing.fengjing1
                ivc.title = "风景1"
            case "fengjing2":
                ivc.imageURL = DemoURL.Fengjing.fengjing2
                ivc.title = "风景2"
            case "fengjing3":
                ivc.imageURL = DemoURL.Fengjing.fengjing3
                ivc.title = "风景3"
            default:break
            }
        
        }
    }
  
}

现在来运行试试,你会发现点击所有按钮依然只显示默认的图片,这是怎么回事呢?

这是因为我们之前在viewDiaLoad中增加了测试代码,现在把测试代码删掉。再次运行你会看到初始化打开的页面上没有照片,返回到主页面点击按钮选择照片,由于图片很大,按钮会卡顿,在图片加载完成后才会跳转到照片的显示页面。


在现在ImageViewController中拖拽一个scrollview,点击约束中的reset to suggested Constraints。然后把图片放到这个滚动视图中,在代码中生成滚动视图的outlet。首先要修改的地方是viewDidLoad方法,imageView不再放到view中而是放到scrollview中:

 override func viewDidLoad() {
        super.viewDidLoad()
        scrollview.addSubview(imageView)
        
    }

其次任何图片发生变化的地方都需要修改scrollview的尺寸,因为我们需要scrollview一直保持和它上面的imageview相同的尺寸:

outlet中:

@IBOutlet weak var scrollview: UIScrollView!{
    
        didSet{
        scrollview.contentSize = imageView.frame.size
        }
    }

计算属性image的定义中:

private var image:UIImage? {
        get {return imageView.image}
        set {
        imageView.image = newValue
        imageView.sizeToFit()
        scrollview?.contentSize = imageView.frame.size
        }
    }
这里在scrollview尾部增加?是因为在图片变动时不能保证scrollview存在,而oulet和viewDidLoad方法中使用scrollview不用加?是因为在两种情况中scrollview是肯定存在的,这也是保护程序不异常退出的有效方法。现在来运行一下试试,点击按钮时依旧很慢,可喜可贺的是我们可以拖动图像了。


显然现在我们需要添加缩放方法,添加缩放的最好位置是在scrollview的outlet中,记得我们之前讲过的用法首先让ImageViewController遵守scrollview的代理,然后修改如下outlet:

 @IBOutlet weak var scrollview: UIScrollView!{
    
        didSet{
        scrollview.delegate = self
        scrollview.maximumZoomScale = 1.0
        scrollview.minimumZoomScale = 0.05
        scrollview.contentSize = imageView.frame.size
        }
    }

因为scrollview的代理方法是OC风格的,所以即便你没有实现代理方法,也不会报错,现在我们实现需要的代理方法.

选择需要进行缩放的视图,显然是我们的imageView

 func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }

现在运行,然后按住option键可以模拟两个手指的缩放操作,效果如下:




目录
相关文章
|
iOS开发
iOS 开发 - tableView内嵌scrollView时,在plus上滑动scrollView时和tableView有冲突
iOS 开发 - tableView内嵌scrollView时,在plus上滑动scrollView时和tableView有冲突
174 0
|
iOS开发
iOS开发 - ScrollView滚动时怎么判断滚动停止及滚动的方向
iOS开发 - ScrollView滚动时怎么判断滚动停止及滚动的方向
902 0
|
设计模式 程序员 iOS开发
iOS ScrollView的使用教程
iOS ScrollView的使用教程
294 0
iOS ScrollView的使用教程
|
iOS开发
iOS 处理ScrollView和侧滑返回滑动冲突
iOS 处理ScrollView和侧滑返回滑动冲突
231 0
|
iOS开发
iOS ScrollView嵌套tableview左右滑动时禁止上下滑动
iOS ScrollView嵌套tableview左右滑动时禁止上下滑动
2072 0
|
前端开发 iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC
   继续上一话中的计算器Demo,上一话讲到类必须被初始化,类中的属性也必须被初始化,所以你不能只声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么只有声明而不需要初始化呢,这是因为它的类型依旧是一个optional,在你初始化之前已经被赋值为nil了,这也就是为什么你不需要再初始化它的原因。
873 0
|
Unix iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
  首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发。
1062 0
|
存储 安全 测试技术
《iOS取证实战:调查、分析与移动安全》一导读
本书适用于对iPhone和其他iOS设备感兴趣的读者,尤其适合那些对设备中能恢复的存储数据类型感兴趣的读者阅读。
1406 0
|
安全 iOS开发
《iOS取证实战:调查、分析与移动安全》一3.9 参考文献
本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第3章,第3.9节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1059 0
|
存储 安全 iOS开发
《iOS取证实战:调查、分析与移动安全》一3.5 存储器类型
本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第3章,第3.6节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1298 0