本人思念咨询, 下雨天里出门如何才会优雅地装B?

友们!大噶好!最近全国各地众多地方还是雨天气,在福建广州等等的地方,雨转下便摔天毁地,出行都分外无便宜。

随后上同一首swift/制作一个简易的tableheaderview+_navigationbar渐变效果(一)承完成无开了的天职


编码

达同样篇已完结了对UINavigationBar的恢宏,仅仅只是所以了24履代码变齐想要之法力。接下来编写tableheaderview的机能有。

ParallaxHeaderView模糊.gif

这儿我们后台接受了这么的一个发问,竟然想使当雨天优雅一拿****

2:ParallaxHeaderView(1在上篇%>_<%)

则只是好像于一个图片下拉放大的功力,但请允许我使用Parallax来命名。

示例图给起些许种植功效,一种植有模糊效果一样栽无模糊效果。先来促成率先种植无模糊效果的。


靶分析

要求:

1:tableHeaderView需要来布置图片(废话)
2:图片能够根据滚动的差而显得非平等的体(大小、显示范围)

每当分析方法之前先干明白两碰

自身要来认真的对这题目啊

UIImageView的contentMode属性的打算意义
        /**
         UIViewContentModeScaleToFill : 图片拉伸至填充整个UIImageView(图片可能会变形)

         UIViewContentModeScaleAspectFit : 图片拉伸至完全显示在UIImageView里面为止(图片不会变形)

         UIViewContentModeScaleAspectFill : 
         图片拉伸至 图片的宽度等于UIImageView的宽度 或者 图片的高度等于UIImageView的高度 为止

         UIViewContentModeRedraw : 调用了setNeedsDisplay方法时,就会将图片重新渲染

         UIViewContentModeCenter : 居中显示
         UIViewContentModeTop,
         UIViewContentModeBottom,
         UIViewContentModeLeft,
         UIViewContentModeRight,
         UIViewContentModeTopLeft,
         UIViewContentModeTopRight,
         UIViewContentModeBottomLeft,
         UIViewContentModeBottomRight,

         经验规律:
         1.凡是带有Scale单词的,图片都会拉伸
         2.凡是带有Aspect单词的,图片都会保持原来的宽高比,图片不会变形
         */

上面是原先之所以oc的时刻对UIImageView的contentMode的片说明,在及时使UIViewContentModeScaleAspectFill马上等同效开展现身说法验证(因为品种面临以的就是这模式)。

红色的层面是UIImageView的大小320X100,而它的image大大小小是320X320,如果非设置clipsToBounds性能的言辞,还是会看到整张图片就UIImageView的大小不够。(注意:使用UIImageVIew的init?(named
name: String)
艺术创建有之imageView大小默认是暨image一样好的)

@Dexter

tableView的contentOffset以及contentInset属性(其实是UIScrollView的属性)

网上有很多解说的文章,这里就是非详细讲解,做只简易解释.

恰使达到图所示,UITableViewController起导航栏的状况。默认是不会见为导航栏遮挡的,这并无是因tableView的y值是64的原故,而是以automaticallyAdjustsScrollViewInsets性的有,会以tableViewcontentInset。Top安也64,从而造成未”被遮挡”(其实TableView还是受屏蔽了同样片段,只是显示UI的contentView位置偏移了)。那么现在自己想咨询tableViewcontentOffset值是多少?答案是-64。contentOffset
是scrollview当前著区域顶点相对于frame顶点的偏移量,contentInset
是scrollview中contentView.frame.origin与scrollview.frame.origin的涉嫌

关于什么优雅的躲雨,网上为时有发生过多章,还有「学者」甚至特意研究过,如果于暴风雨中未自伞,到底是缓倒还是赶快蒸发淋到之冰暴还多?

编码实现:

任然同步一步的来

我当知乎上吧看出了一个相关的回答,大概是这么的****

1:设计构造方法

创建一个ParallaxHeaderView.swift并加上

class ParallaxHeaderView: UIView {

    var subView: UIView
    var contentView: UIView = UIView()


    init(subView: UIView, headerViewSize: CGSize) {

        self.subView = subView
        super.init(frame: CGRectMake(0, 0, headerViewSize.width, headerViewSize.height))
        //这里是自动布局的设置,大概意思就是subView与它的superView拥有一样的frame
        subView.autoresizingMask = [.FlexibleLeftMargin, .FlexibleRightMargin, .FlexibleTopMargin, .FlexibleBottomMargin, .FlexibleWidth, .FlexibleHeight]
        self.clipsToBounds = false;  //必须得设置成false

        self.contentView.frame = self.bounds
        self.contentView.addSubview(subView)
        self.contentView.clipsToBounds = true
        self.addSubview(contentView)

    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

然后创建一个ParallaxHeaderView并设置也tableHeaderView

             override func viewDidLoad() {
        super.viewDidLoad()

         self.navigationController?.navigationBar.setMyBackgroundColor(UIColor(red: 0/255.0, green: 130/255.0, blue: 210/255.0, alpha: 0))

        let imageView = UIImageView(frame: CGRectMake(0, 0, self.tableView.bounds.width, 100))
        imageView.image = UIImage(named: "ba1ec0437cc8d5367a516ff69b01ea89")
        imageView.contentMode = .ScaleAspectFill

        let heardView = ParallaxHeaderView(subView: imageView, headerViewSize: CGSizeMake(self.tableView.frame.width, 100))
        self.tableView.tableHeaderView = heardView

    }

结果效果是如此的

发觉图片压根就是不曾从(0,0)点来得,因为我们唯有值是创建了,啥还没拍卖的。这里我们目标特别显,要给图片从(0,0)开始展示并再安装大小。所以我们反ParallaxHeaderViewcontentViewframe便哼了。还记前面说的automaticallyAdjustsScrollViewInsets属性让tableViewontentInset。Top电动成为64的啊?这里活动安装的历程系统会机动调用scrollViewDidScroll,于是我顺水推舟,顺便给它们也帮自己再也设置contentViewframe

产生趣味之爱人可研究一下地方的公式到底在游说啊,反正根据自己的精打细算,这个公式就是在说

2:滚动计算contentView的frame

优先贴代码再解释,在ParallaxHeaderView.swift中补充加如下方法

    func layoutHeaderViewWhenScroll(let offset: CGPoint) {

        var delta:CGFloat = 0.0
        var rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)

        delta = offset.y
        rect.origin.y += delta ;
        rect.size.height -= delta;

        self.contentView.frame = rect;

    }

当控制器中持续增长

    override func scrollViewDidScroll(scrollView: UIScrollView) {
        let heardView = self.tableView.tableHeaderView as! ParallaxHeaderView
        heardView.layoutHeaderViewWhenScroll(scrollView.contentOffset)
    }

Bingo!在ParallaxHeaderView.swift内部添加的凡滑动设置contentViewframe的方法。在scrollViewDidScroll遭受尽管是调用。那为什么才修改就点儿独地方,一开始图片大小也易了吗?没错,在automaticallyAdjustsScrollViewInsets属性为true的场面下,系统在加载的早晚即便会自行调用scrollViewDidScroll方法。至于layoutHeaderViewWhenScroll里的计量方法,自己体会体会,很粗略。

「下雨了不畏急忙蒸发啊!还傻呵呵呆在干屁啊!」

3:锁定最充分滑动位置。

按照地方那样做是匪完美之,因为自己连连的下拉,图片会持续的转移死。而其实需要数是,下拉至早晚之位置就是不可知继承下拉了。接下来就延续完善。

  • 改构造方法

    /// 最大的下拉限度(因为是下拉所以总是为负数),超过(小于)这个值,下拉将不会有效果
    var maxOffsetY: CGFloat
   init(subView: UIView, headerViewSize: CGSize, maxOffsetY: CGFloat) {

        ...
        self.maxOffsetY = maxOffsetY < 0 ? maxOffsetY : -maxOffsetY
        ....
   }

加加了一个无比酷下拉的y值,其他不修改的地方没贴出

  • 概念协议

protocol ParallaxHeaderViewDelegate: class {
    func LockScorllView(maxOffsetY: CGFloat)
}
//这个的意思是,对协议进行扩展,任何遵守此协议的UITableViewController都由默认的实现方法
extension ParallaxHeaderViewDelegate where Self : UITableViewController {
    func LockScorllView(maxOffsetY: CGFloat) {
        self.tableView.contentOffset.y = maxOffsetY
    }
}

这边用到swift2.0的初特性了。因为只要是动ParallaxHeaderView夫的类似的,我接连期望他能够锁定最可怜的职务,所以必然都见面去落实LockScorllView本条协议方式,又坐这个办法的贯彻是稳定的,所以自己直接让了她一个默认的落实,这样尽管不用总是去形容重复的商谈了。

然后修改一下layoutHeaderViewWhenScroll方法

    func layoutHeaderViewWhenScroll(let offset: CGPoint) {

        if offset.y < maxOffsetY {
            self.delegate.LockScorllView(maxOffsetY)

        }else {
            var delta:CGFloat = 0.0
            var rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)

            delta = offset.y
            rect.origin.y += delta ;
            rect.size.height -= delta;

            self.contentView.frame = rect;

        }
    }

再次修改构造方法,添加一个参数。

    weak var delegate: ParallaxHeaderViewDelegate!

    init(subView: UIView, headerViewSize: CGSize, maxOffsetY: CGFloat, delegate: ParallaxHeaderViewDelegate) {
    ...
        self.delegate = delegate
    ...

    }

此时还在控制器里到初始化,并加在scrollViewDidScroll累加上篇博客写的扩充,就ok了

    override func scrollViewDidScroll(scrollView: UIScrollView) {
        let heardView = self.tableView.tableHeaderView as! ParallaxHeaderView
        heardView.layoutHeaderViewWhenScroll(scrollView.contentOffset)

        let color = UIColor(red: 0/255.0, green: 130/255.0, blue: 210/255.0, alpha: 1)
        let offsetY = scrollView.contentOffset.y
        let prelude: CGFloat = 50

        if offsetY >= -64 {
            let alpha = min(1, (64 + offsetY) / (64 + prelude))
            //NavBar透明度渐变
            self.navigationController?.navigationBar.setMyBackgroundColor(color.colorWithAlphaComponent(alpha))

        } else {
            self.navigationController?.navigationBar.setMyBackgroundColor(color.colorWithAlphaComponent(0))
        }
    }

运作效果图虽非贴了。

上面是起天经地义的角度,分析了应有如何优雅的躲雨,那么说话又说回去,有没有出什么样优雅的雨具可以据此呢?

张冠李戴效果

盖原理相似,而且时间比较不方便就不写了。最终版本代码都上传到GitHub[ParallaxHeaderView][id]
[id]:
https://github.com/SmallLang/ParallaxHeaderView
“ParallaxHeaderView”

雨天大家常用之雨具无非就是是雨伞、雨靴及雨衣了,而偏偏有那有品牌将这些平凡之无能够再次平凡之东西,做出了「优雅」的意味,这间以雨伞最为惨重

愈优化

代码还有为数不少相差,比如自己还得在scrollViewDidScroll中添加大量划算导航栏透明度的代码。这种计算是通用的,因为连续期待当第一个cell滑动到导航栏下,导航栏就无透明了。完整代码在GitHub[ParallaxHeaderView][id]

一致管优雅的雨伞

总结

虽说再度过去轮子不是同等种植好的习惯,在规范项目开发被也会严重拖缓项目开发进度。但是对新家,可以说凡是同样种是的上学方法。文章被如出现啊错或好之提议欢迎大家提出,我们共开展上。要教了就算不啰嗦了。

说到底还是依附GitHub[ParallaxHeaderView][id]

伞对于各位型男们来说,绝对是下雨天极端实用的装B利器。而平等把真的好的伞,在许多方还具备独特之厚****

生有初级B们好用有些金属伞头的伞。

只是的确的好伞必须是为此木材制造。而且伞轴和伞柄会采用一体统筹,也就是说,整个伞轴和伞柄是故一致完完全全完整的木头做出来****


若是以伞面部分,也不会见利用相似雨伞常用之锦纶料。

比入门的高端雨伞会就此高密度之棉料,而实在的士绅,则会选用丝绸,让整把雨伞上都透露方强烈的复古中国风的人民币寓意****

一如既往将高端雨伞,是绝对免会见动折叠设计之。虽然折叠伞方便携带,但是古板的欧洲人数认可这么当,他们总是认为只有「原汁原味的直柄伞,才是极其经典的****

哼比说来自意大利手工做的「Francesco
Maglia」
雨伞,和外欧洲家族企业一样,这吗是一个持有百年史的小作坊,已经招至了第五替掌门人,现在的业主是一个爱留长胡子的老伴****

Francesco Maglia
的雨伞柄必须是为此全木结构,在手柄的职,还有好的抛,木头表面看起很光滑。有些手柄部位还见面包裹真皮,真的是迷你到了架子里****

再有有独立设计之伞柄,那真是把意大利总人口之骚劲儿发表得透彻了,材料极尽奢华不开腔,造型做工上花了好多心思,打磨抛光之后,闪闪发亮****

可这样的均等拿伞,售价吧愈及300欧。左右就自己有钱打,也舍不得用出去淋雨

除去上面提到的这种传统经典雨伞,一些时尚的弄潮儿还表明了相同种植如震动棒一样的空气雨伞****

造型上就是是同等清杆子,以上面可以往周围喷气,起及把雨滴吹到四周的企图。看来好像特别厉害的楷模****

而是这样的状拿出去,也着实是用或多或少胆量的

这就是说等同拿质量正常的伞应该加上什么则吧?

无限关键之部位有零星独,分别是伞骨和伞面

先期来说说伞骨,市面上大规模的伞骨都是为此钢材制作的,差一点雨伞会来8干净伞骨,好一些的会晤时有发生10届12清。自然伞骨根数越多,抵抗风的力就是愈加强****

本考虑到伞的尊重的问题,好一些的伞会利用铝合金+玻璃微来打伞骨,来抵消刚度及不俗的涉及。

有关伞面的话,尼龙凡同等种植普遍的素材,不仅防水性能好,而且抗撕裂表现呢呈现杰出。比如说就管西方之自发性开合伞,在表面还抹有一致叠防水涂料,水滴得于地方就回滚掉,就如水滴得于荷叶上同****



扣押罢了手上拿的,我们再次来看望下面上过底,脚上穿底雨靴同样可以有不同等的选择。

一律夹优雅的雨靴

小时候旁友们自然都穿橡胶套鞋,然而长大了以后,大多觉得太烦人了,就放弃了这种鞋款。

然骨子里在英国,一个深受hunter的品牌,做这种造型的雨靴做了150大抵年了****

坐靴子本身的质量高,在个别次世界大战中,Hunter
都吃求呢军队提供防水的高帮靴子。总共生产了200几近万对。

随后在1955年设计出来的 Welly Boots,更是成为了 Hunter
最经典的款型。一开始这种绿色高筒靴是特别给英国皇家打猎用的,不过一直到今,这种鞋靴仍在生育,英国前面首相卡梅伦外出的下也喜欢穿正****

而今 Hunter 也生产了多种不同款式的雨靴。

以好穿脱,设计了这种中帮的雨靴,造型上也从来不那被第二,即使勿产暴雨穿出来吗没有问题****

虽连给称之为最会穿衣的Wooster,也喜好以下雪天穿越同双双 Hunter
出门,又实用又无失风范****

至于价钱嘛,也是千篇一律卖价钱一样分货了,英国官网的售价是145美元同夹,确实还是生来贵的感觉到****

那么有没有发出类同正常一点的防水鞋子,既可雨天穿,平凡穿出门呢从不压力的为?

本是局部。

一般的话,一夹鞋要防水,无非就是是个别种做法。还是以外部上上严防水涂层,要么直接行使防水材料制作。

比如说大家耳熟能详的 Timberland
大黄靴,就是于鞋面上动防水涂层,使水滴在滴到鞋面上的时候会一直滚得下去,有接触像水滴在荷叶上的法,也有人管这种防水效果称为荷叶防水****

这种涂层并无会见一直留在鞋面上,越过正日子久了然后,涂层会脱落,这时候若鞋面还每每泡水,其实会指向皮料造成损伤****

故这种涂层的防水鞋靴,也只是能形成轻量的防水而曾经,并非以他当雨靴一样去玩水

假如任何一样种植使防水面料的履,不论是防水作用或确实程度,都如比涂层防水好有。常见的生Gore-tex面料,这种经常以窗外装备里冒出的布料,同样可以用来开鞋内衬****

来美国之鞋靴品牌danner,就欣赏为靴子配上gortex面料的内衬,在保证防水的又,兼顾鞋子的透气性****




唯独讲道理,下雨天极利于的,还是过同件雨衣,既未见面影响健康活动,又能管身上不见面被暴雨淋到。

无异于宗优雅的雨衣

于经典的不外乎大家熟悉的
Burberry,还有一个叫Barbour的品牌,也是以结果耐用驰名。在道及竟吃名是贵社会之门票(价钱确实是老权威社会)****

Barbour
采用的防水技术,就是当直面料上上上一致叠防水蜡,这种涂层自然吧会趁着时间推移而脱落。不过
Barbour 可以提供终身的保修服务,这吗便是为什么经常会放人说一样码
Barbour 穿了几十年的布道****

再有有传的略故事,说啊某位钓鱼者在海上及狂风搏斗了十几个钟头,又漂流了十几只钟头,最后被找到的时刻
Barbour 外套里的服还是涉及的。

至于故事的真伪其实为决不能考证,但也确打一个边,体现了 Barbour
外套优秀的防水性能

倘说 Barbour
在设计达到泰国老陈,那么源于瑞典底Stutterheim断算是得及是规划极端青春的雨衣,先来瞧他们下之雨衣感受一下****

说确实,看了这家的雨衣,完全刷新了自家本着雨衣的认,原来雨衣也堪如此有型。大太阳天,被潮人们过出街,完全不会见联想到当下是雨衣吧****

Stutterheim
雨衣都是内层采用的凡棉质内衬,外面覆盖的戒备水胶,而防水胶本身的硬挺质感,也被雨衣本身造型更是大刮****

再就是生产的每一样桩雨衣都发自己的产编号与日期,在整件衣服上未曾接缝,保证了雨衣的防风防水性能****

只是他的售价吧是一定完美,官网直接出售至了295美元,想必这样同样件雨衣穿出来,装个B应该不成问题了吧。

然而呢闹有服饰,带有轻微的防水功能性,在平常底穿越正搭配吃呢不成问题,或者换句话说,就是部分备一定防水作用的外套****

比如说我们超市的RDET的立刻起夹克,在尼龙面料上蔽了防水涂层,是衣服得了自然之防水性能****



这种外套平常穿在为绝非问题,而即使遇见了突如其来状况,放一点小雨也不在言语下,反倒会愈发实用。

哼哪,关于雨具今天虽聊到这里吧,主要为是自身实在是摹写不动了。最后,我思念说,下雨天最牛B的,难道不是这么也****



好啦

今天之话题我们不怕聊到这里呀

咱前再见 🙂