(八)喜马拉雅Demo引出的细节(代理模式和图片缩放)

喜玛拉雅是一款电台APP,界面非常美观,通过模仿这一APP学习到很多细节。

1.图片导入后有些框内不全如何补全:

寻常的办法是再准备一张图片拖入,比较好的办法是右击已经导入的图片选择Show in Finder,通过编辑Contents.json文件来修改。

2.如何确定UIScrollView的总体尺寸:

根据尽头的控件尺寸和位置。

使用方法CGRectGetMaxY,传入尽头控件的frame,即可算出Y的滚动范围,X同理。

3.做出ScrollView穿透效果

新建一个View,置于Scroll下面(注意要拖动ScrollView才能放到下面,直接拖到View会被放入ScrollView),然后修改透明度。

4.ScrollView的contentSize属性,对于不需要拖动的区域,例如width,直接写0即可,不必写成视图宽度。

5.ScrollView的其他属性

showHorzontalScrollIndicator和showVerticalScrollIndicator表示是否显示水平和垂直滚动条。

bounces表示需要弹簧效果。


使用ScrollView实现捏合手势图片的缩放

模拟器中实现两指手势:按住option键再拖动。

需要使用代理设计模式(又叫委托设计模式)。

引入:想在UIScrollView正在滚动或者滚动到某个位置的时候做一些事情,前提条件是能够监听UIScrollView的整个滚动过程。

在UIScrollView中有一个代理属性delegate,当UIScrollView发生一系列滚动操作,会自动通知delegate对象,让代理知道它的滚动情况。

@property(nonatomic,assign) id<UIScrollViewDelegate>      delegate;  

可见它的delegate遵循UIScrollViewDelegate协议(方法的集合)。id类型可见,任何对象都可以监听。

Tip:协议中的方法,如果声明为@optional,不实现不会报错,没有声明为@optional的必须全部实现。

监听条件:必须实现协议中的方法。

Tip:在OC中,发送消息的含义就是调用方法。

用户开始拖拽,调用scrollViewWillBeginDragging:方法。

滚动到具体位置,调用scrollViewDidScroll:方法。

用户停止拖拽,调用scrollViewDidEndDragging:willDecelerate方法

Tip:注意冒号是方法名的一部分!

一般是用控制器监听。

1.声明监听:

@interface ViewController ()  <UIScrollViewDelegate>

@end

2.代理设置:

self.scrollView.delegate = self;
3.实现方法:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"Begin Drag");
}

注意体会代理设计模式的作用和好处。

作用:某个对象监听到另一个对象的状态,或者说某个对象的状态改变想通知另一个对象。


当用户在UIScrollView身上使用捏合手势的时候,UIScrollView会给代理发消息,询问代理究竟要缩放自己内部的哪个子控件。一次性只能缩放一个子控件。

通过方法viewForZoomingInScrollView,返回UIView *(需要缩放的控件)。

除此之外,还有设置最大和最小缩放比例。

self.scrollView.maximumZoomScale = 2.0;
self.scrollView.minimumZoomScale = 0.2;

然后实现方法,返回要缩放的控件:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return self.imageView;
}


posted on 2015-02-05 12:11  张大大123  阅读(225)  评论(0编辑  收藏  举报

导航