1. 首页 > 热点 >

scrollview滚动到指定位置_scrollview不滚动

如何使用ScrollView

填充图案的定义也有两种,一种是按毫米定义的,一种是按英寸定义的,在公制图纸中通常是按毫米定义的。

scrollview滚动到指定位置_scrollview不滚动scrollview滚动到指定位置_scrollview不滚动


一、结构

public class ScrollView extends FrameLayout

ja.lang.Object

Android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ScrollView

二、概述

一种可供用户滚动的层次结构布局容器,允许显示比实际多的内容。ScrollView是一种FrameLayout,意味需要在其上放置有自己滚动内容的子元素。子元素可以是一个复杂的对象的布局管理器。通常用的子元素是垂直方向的LinearLayout,显示在最上层的垂直方向可以让用户滚动的箭头。

TextView类也有自己的滚动功能,所以不需要使用ScrollView,但是只有两个结合使用,才能保证显示较多内容时候的效率。但只有两者结合使用才可以实现在一个较大的容器中一个文本视图效果。

ScrollView只支持垂直方向的滚动。

三、构造函数

public ScrollView (Context context)

创建一个默认属性的ScrollView实例

public ScrollView (Context context, AttributeSet attrs)

创建一个带有attrs属性的ScrollView 实例。

public ScrollView (Context context, AttributeSet attrs, int defStyle)

创建一个带有attrs属性,并且指定其默认样式的ScrollView实例。

四、公共方法

public void addView (View child)

添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。

public void addView (View child, int index)

添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。

index 添加子视图的位置

public void addView (View child, int index, ViewGroup.LayoutParams params)

根据指定的layout参数添加子视图

index 添加子视图的位置

params 为子视图设置的layout参数

public void addView (View child, ViewGroup.LayoutParams params)

根据指定的layout参数添加子视图。

params 为子视图设置的layout参数

public boolean arrowScroll (int direction)

响应点击上下箭头时对滚动条滚动的处理。

direction 按下的箭头所对应的方向

如果我们处理(消耗)了此返回true,否则返回false。

被父视图调用,用于必要时候对其子视图的值(mScrollX和mScrollY)进行更新。典型的情况如:父视图中某个子视图使用一个Scroller对象来实现滚动作,会使得此方法被调用。

发送一个key给当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图。如果此视图为焦点视图,将为自己发送。否则,会为当前焦点路径的下一个节点发送。此方法也会激起一个key。

public void draw (Canvas canvas)

手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。当实现一个视图时,不需要继承这个方法;相反,你应该实现onDraw(Canvas)方法。

canvas 绘制视图的画布

public boolean executeKeyEvent (KeyEvent nt)

当接收到key时,用户可以调用此函数来使滚动视图执行滚动,类似于处理由视图体系发送的。

nt 需要执行key的

public void fling (int velocityY)

滚动视图的滑动(fling)手势。(译者注: 如何android的屏幕滑动停止)

velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。

public boolean fullScroll (int direction)

对响应“home/end”短按时响应滚动处理。此方法将视图滚动到顶部或者底部,并且将焦点置于新的可视区域的最顶部/部组件。若没有适合的组件做焦点,当前的ScrollView会收回焦点。

direction滚动方向:FOCUS_UP表示视图向上滚动;FOCUS_DOWN表示视图向下滚动

若key被消耗(consumed)返回true,其他情况返回false。

public int getMaxScrollAmount ()

当前滚动视图响应箭头能够滚动的数。

public boolean isFillViewport ()

指示当前ScrollView的内容是否被拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。

内容填充视图返回true,否则返回false。

public boolean isSmoothScrollingEnabled ()

按箭头方向滚动时,是否显示滚动的平滑效果。

public boolean onInterceptTouchEvent (MotionEvent ev)

实现此方法是为了拦截所有触摸屏幕时的运动。可以像处理发送给子视图的一样去监视这些,并且获取当前手势在任意点的ownership

1. 收到down

2. Down或者由视图组的一个子视图处理,或者被用户自己的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理)。如果onTouchEvent()返回true时,你不会收到onInterceptTouchEvent()的任何并且所有对触摸的处理必须在onTouchEvent()中发生。

3. 如果此方法返回false,接下来的(up to and including the final up)将被传递当此,然后是目标的onTouchEvent()。

4. 如果返回true,将不会收到以下任何:目标view将收到同样的但是会伴随ACTION_CANCEL,并且所有的更进一步的将会传递到你自己的onTouchEvent()方法中而不会再在这里出现。

ev 体系向下发送的动作

如果将运动从子视图中截获并且通过onTouchEvent()发送到当前ViewGroup ,返回true。当前目标将会收到ACTION_CANCEL,并且不再会有其他消息传递到此。

(译者注:onInterceptTouchEvent和onTouchEvent调用时序)

public boolean onTouchEvent (MotionEvent ev)

执行此方法为了处理触摸屏幕的运动。

ev 运动

public boolean pageScroll (int direction)

响应短按“page up/ down”时候对滚动的处理。此方法将向上或者向下滚动一屏,并且将焦点置于新可视区域的最上/最下。如果没有适合的component作为焦点,当前scrollView将收回焦点。

此key被消耗(cosumed)返回true,其他返回false。

public void requestChildFocus (View child, View focused)

当父视图的一个子视图的要获得焦点时,调用此方法。

child 要获得焦点的父视图的子视图。此视图包含了焦点视图。如果没有特殊徐要求,此视图实际上就是焦点视图。

focused 子视图的子孙视图并且此子孙视图是真正的焦点视图

public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)

当组里的某个子视图需要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup可确认以下几点:

矩形将在子项目的坐标体系中

重载此方法的ViewGroup应该支持以下几点:

若矩形已经是可见的,则没有东西会改变

为使矩形区域全部可见,视图将可以被滚动显示

child 发出请求的子视图

rectangle 子项目坐标系内的矩形,即此子项目希望在屏幕上的定位

immediate 设为true,则禁止动画和平滑移动滚动条

进行了滚动作的这个组(group),是否处理此作。

public void requestLayout ()

当有改变引起当前视图重新布局时,调用此函数。它将规划一个视图树的layout路径。

public void scrollTo (int x, int y)

设置当前视图滚动到的位置。此函数会引起对onScrollChanged(int, int, int, int)函数的调用并且会让视图更新。

当前版本取消了在子视图中的滚动。

x 滚动到的X位置

y 滚动到的Y位置

public void setFillViewport (boolean fillViewport)

设置当前滚动视图是否将内容高度拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。

fillViewport 设置为true表示拉伸内容高度来适应视口边界;其他设为false。

public void setOverScrollMode (int mode)

为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只允许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER。只有当视图可以滚动时,此项设置才起作用。

(译者注:这个函数是2.3 r1 中新增的,API Ll 9。关于over-scroll这里译为弹性滚动,即,参见帖子:类似iPhone的弹性ListView滚动)

mode The new over-scroll mode for this view.

用来设置箭头滚动是否可以引发视图滚动。

oothScrollingEnabled 设置箭头滚动是否可以引起内容的滚动的bool值

dx 在X方向滚动的像素数

dy 在Y方向滚动的像素数

public final void oothScrollTo (int x, int y)

类似于scrollTo(int, int),但是滚动时候是平缓的而不是立即滚动到某处。

x 要滚动到位置的X坐标

y 要滚动到位置的Y坐标

五、受保护方法

protected int comScrollDeltaToGetChildRectOnScreen (Rect rect)

rect 矩形

protected int comVerticalScrollOffset ()

计算垂直方向滚动条的滑块的偏移。此值用来计算滚动条轨迹的滑块的位置。

缺省的偏移是在当前视图滚动的偏移。

滚动条的滑块垂直方向的偏移。

protected int comVerticalScrollRange ()

滚动视图的可滚动范围是所有子元素的高度。

由垂直方向滚动条代表的所有垂直范围,缺省的范围是当前视图的画图高度。

protected float getBottomFadingEdgeStrength ()

返回滚动底部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。

滚动底部能见度,值的范围在浮点数0.0f到1.0f之间。

protected float getTopFadingEdgeStrength ()

返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。

滚动顶部能见度,值的范围在浮点数0.0f到1.0f之间。

protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)

要求当前视图的一个子视图测量自己,同时兼顾到当前视图的MeasureSpec的要求和它的空白。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。

child 需要自己测量的子视图

parentWidthMeasureSpec 当前视图要求的宽度

parentHeightMeasureSpec 当前视图要求的宽度

protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)

要求当前视图的一个子视图测量自己,同时兼顾到当前视图的MeasureSpec的要求和它的空白和边界。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。

child 需要测量的子视图

parentWidthMeasureSpec 当前视图要求的宽度

widthUsed 水平方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)

parentH使用getFirstVisiblePosition() == 0就可以,或者你可以直接判断ition是不是为零,但是一条就不是那么好弄了eightMeasureSpec 当前视图要求的宽度

heightUsed 垂直方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)

protected void onLayout (boolean changed, int l, int t, int r, int b)

当前视图需要为子视图分配大小和位置时候调用,子类继承必须要重载此方法并调用自己子视图的layout函数。

changed 当前视图的新的大小或者位置

l 相对父视图,左边界位置

t 相对父视图,上边界位置

r 相对父视图,右边界位置

b 相对父视图,下边界位置

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。

约定:当重写此方法时,你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常,是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。

父类的实现是以背景大小为默认大小,除非MeasureSpec(测量细则)允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。

如果此方法被重写,那么子类的是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度(getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()),使用这两个方法可以取得最小宽度和最小高度。

heightMeasureSpec 受主窗口支配的垂直空间要求。这个需求通过 View.MeasureSpec.进行编码。

protected void onOverScrolled (int scrollX, i2. cell常见属性nt scrollY, boolean clampedX, boolean clampedY)

被overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll作的结果进行响应。(译者注:这个函数是2.3 r1 中新增的,API Ll 9)

scrollY 新的Y滚动像素值

clampedX 当scrollX被over-scroll的边界限制时,值为true

clampedY 当scrollY被over-scroll的边界限制时,值为true

protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)

当在滚动视图的子视图中查找焦点视图时,需要注意不要将焦点设置在滚动出屏幕外的控件上。此方比执行缺省的ViewGroup代价高,否则此行为也会设置为缺省

direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT

previouslyFocusedRect 能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示为null。

是否取得了焦点

protected void onSizeChanged (int w, int h, int oldw, int oldh)

布局期间当视图的大小发生改变时调用。如果只是添加到视图,调用时显示的是旧值0。(译者注:也就是添加到视图时,oldw和oldh返回的是0)。

w 视图当前宽度

h 视图当前高度

oldw 视图改变前的宽度

oldh 视图改变前的高度

android 的ListView中怎么判断其内容已滚动到最顶部或者部

if (scrollView.contentOffset.x == 0){

如果你是绑定的BaseAdap} else {ter,用ition判断就可以了,最顶端ition值为0,端为数据源的长度。

public void setSmoothScrollingEnabled (boolean oothScrollingEnabled)

或者使用ListView的滚动来判断。

ListView滚动到部或顶部使用 onScrollStateChanged(AbsListView view, int scrollState) 方法,代码大致如下:

getListView().setOnScrollListener(new OnScrollListener() {

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

}@Override

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

if(firstVisibleItem==0){

Log.e("log", "滑到顶部");

}if(visibleItemCount+firstVisibleItem==totalItemCount){

Log.e("log", "滑到底部");

scrollState == OnScrollListener.SCROLL_STATE_IDLE

&& firstVisibleItem != 0

firstVisibleItem 是记录行的值

ScrollView的高度如何设置。

child 计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满个屏幕大小)。 所添加的子视图

如果你把内容包含在ScrollView中,当内容超出高度时会自动出现滚动条。另外,使用控件HorizontalScrollView来包住你的内容时, 如果你的内容假设是一个LinearLayout,那么当LinearLayout的宽度超过屏幕时,将会自动产生滚动条,当你拖动鼠标时,效果跟scrollView一样,不过是横向而己例:纵向滚动var time = 100; //移动间隔时间(毫秒)

如何让jquery动画效果在屏幕滚动到指定位置才执行

范围可以以任意单位表示,但是必须与comVerticalScrollRange()和comVerticalScrollExtent()的单位一致。

在第二页需要判断滚动方向 意思是在每次滚动完成后都需要记住scrollTop

滚动值

然后才好判断滚动方向 否则没办法做到向上滚动....

}$(document).scrollTop(next);

1.CSS属性值是逐渐改变的,这样就可以创建动画效果。因此只有数字值可创建动画,比如margin:30px 而字符串值无法创建动画,比如background-color:red

2.要实现animate滚动到页面指定id的位置,就要获取ID的数字值,也就是距离顶部的距离,再通过animate的scrollTop滚动

$(document).ready(function($){

$('#comt').click(function(){

$('html,body').animate({scrollTop:$('#}, 800);

$('#xia').click(function(){

$('html,body').animate({scrollTop:$('#}, 800);

});3.点击ID为comt的元素,回到ID为comments的位置;点击ID为xia的元素,回到id为footer的位置。

4.希望你能明白,早日进步哦!

滚动应该使用jquery的动画效果写的吧?但点击导航到第三屏结束的适合可以赋予一个完成后执行的函数,在函数里面添加动画效果,就行,让动画到滚动执行完后在开始执行

滚动应该使用jquery的动画效果写的吧?但点击导航到第三屏结束的适合可以赋予一个完成后执行的函数,在函数里面添加动画效果,就行,让动画到滚动执行完后在开始执行

当滚动100px 后再执行程序了

如何使ListView滑动到指定的的位置

5).重写frame模型属性的setter方法: 在这个方法中设置子控件的显示数据和frame

listView.oothScrollTo4:,你需要告诉UIScrollView缩放的frame并且加上动画。Position(0)可以平滑滚动到顶部

例:

如果你需要平滑滚动的动画效果同时又要满足时间要求,则需要自己写一个继承ListView的类,重写oothScrollToPosition(int ition)方法,自己计算滚动的速度

html设置 overflow-x: scroll;属性后怎么让指定位置定位到中间

5). showsHorizontalScrollIndicator (是否显示水平滚动条)

如果页面不够长(至少窗口长度两倍),那肯定滚动不到一半的位置。否则任何浏览器都不会产生误。下面的例子输出 100 个

,页面加载的时候会滚动到第public final void oothScrollBy (int dx, int dy) 51}}); 个

android scrollview的水平滚动条问题,哪位高手给指教下啊,谢谢了!!

使用此方法时候需要注意,因为它与View.onTouchEvent(MotionEvent)有相当复杂的交互,并且前提需要正确执行View.onTouchEvent(MotionEvent)。将按照如下顺序接收到:

如果你把内容包含在ScrollView中,当内容超出高度时会自动出现滚动条。

另外,使用控件HorizontalScrollView 来包住你的内容时,

参数

如果你的内容假设是一个LinearLayout, 那么当LinearLayout的宽度超过屏幕时, 将会自动产生滚动条,当你拖动鼠标时,效果跟scrollView一样,不过是横向而己

纵向滚动

模向滚动

有时候甚至可以做到横向纵向都支持,只需要你合理设计就可以, 注意ScrollView中只能加一个控制,不能超过两个

Android ScrollView在滚动中调用scrollTo(0,0)回到顶部无效

3> UITextField中添加左右视图 self.textField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0)]; // 设置左边视图的显示模式 self.textField.leftViewMode = UITextFieldViewModeAlways; self.textField.rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0)]; // 设置右边视图的显示模式 self.textField.rightViewMode = UITextFieldViewModeAlways;

问题场景描述:在一个协议页面里面 ScrollView嵌套webview来展示服务协议内容,当用户作刷新功能后,ScrollView自动回滚到服务协议顶部, 会发现当webview已经加载完服务协议页面后, 如果此时页面处于惯性滚动中,滚动效果还没有结束的时候,调用scrollTo(0,0)作用失效,无法回到服务协议页面顶部。

3). bounces (设置UIScrollView是否需要弹簧效果)

原因分析:scrollTo()被惯性滚动效果覆盖,不生效

listView.setSelection(0)可以直接跳到顶部

布局参考:

解决方案:

在scrollTo(0,0)之后加上以下语句调用,打断ScrollView的惯性滚动:

scrollView.oothScrollTo(0, 0)

ios里的enbed in里有两个选项是什么意思 scroll view stack view

var next = top;

scrollView:

子项目将是组里的直系子项

1. 介绍scrollView一些属性

1>.要想使用scrollView必须做两件事

1).设置scrollView内容

2).设置contentSize (滚动范围)

2>.其他属性

1). contentOffset(滚动位置)

2). contentInset(额外增加的滚动区域)

4). crollEnabled (设置UIScrollView是否能滚动)

6). showsVerticalScrollIndicator (是否显示垂直滚动条)

2.

1>思想两个思想

1).思想:BA发生了什么事情

2).通知思想:A发生了一些事情,要通知B去做

2>scrollView的使用

1).如何成为(三步)

声明协议 设置对象self.scrollView.delegate = self; 实现协议方法

2).scrollView的拖拽

// 开始拖拽 - (void)scrollViewWillBeginDragging:(UIScrollView )scrollView; // 结束拖拽 - (void)scrollViewDidEndDragging:(UIScrollView )scrollView willDecelerate:(BOOL)decelerate; // scrollView滚动时执行 - (void)scrollViewDidScroll:(UIScrollView )scrollView

3).用实现缩放

成为UIScrollView的() 设置缩放对象(通过viewForZoomingInScrollView方法) 设置缩放为范围(maximumZoomScale、minimumZoomScale)

3. 定时器创建两种方式

1>. self.timer = [NSTimer scheduledTimerWithTimeInterval:1.f target:self selector:@selector(方法) userInfo:nil repeats:YES]; 当另一个scrollView运行时,会停止定时器的scrollView,只能执行一个scrollView.

2>. self.timer = [NSTimer timerWithTimeInterval:1.f target:self selector:@selector(方法) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

4. 自定义协议并使用

定义protocol(两种optional[对象可不实现]、required[对象必须实现])

增加属性(weak) @property (weak, nonatomic) id delegate;

给发消息,调用的方法(需要判断对象是否实现了该方法,不判断调用后(编译时不会)会报错) 注意:定义协议的名称命名[类名+Delegate]、协议方法的命名规范[方法名称需要去掉前缀,并且将自己作为参数]

2>.使用(三步)

声明协议

设置对象

实现协议方法(本例是在对象[] 添加一个UILabel)

tableView:

1. UITableView 需要设置数据源才能显示数据

1>.会向数据源查询一共多少组,每组多少行,每行显示什么数据

2>.数据源必须遵守UITableViewDateSource协议

3> 一共有多少组

- (NSInteger)tableView:(UITableView )tableView numberOfRowsInSection:(NSInteger)section{} 每一行显示什么内容

- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath{} 第section组头部显示什么标题 - (NSString )tableView:(UITableView )tableView titleForHeaderInSection:(NSInteger)section{} 第section组底部显示什么标题

- (NSString )tableView:(UITableView )tableView titleForFooterInSection:(NSInteger)section{} 当每一行的cell的高度不一致的时候就使用方法设置cell的高度

- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath{} 当每一行的cell高度一致的时候使用属性设置cell的高度

self.tableView.rowHeight = 60; 可以优化内存的可变数组定义

NSMutableArray models = [NSMutableArray arrayWithCapacity : (NSUInteger)]

1>.cell.textLabel.text 标题

2>.cell.detailTextLabel.text 介绍

3>.cell.imageView.image

4>.cell.accessoryView 辅助视图

5>.cell.accessoryView 自定义辅助视图

6>.cell.backgroundView 设置cell的背景颜色

1).通过backgroundColor 和 backgroundView都可以设置cell的背景

2).但是backgroundView 的优先级比 backgroundColor的高

3).所以如果同时设置了backgroundColor和backgroundView, backgroundView会盖住backgroundColor

7>.cell.selectedBackgroundView 设置选中状态的背景

3. UITableView常见属性

1>. tableview.separatorStyle 设置分割线样式

2>. tableview.separatorColor 设置分割线颜色 自定义颜色

获取屏幕宽度: [UIScreen mainScreen].bounds.size.width;

3>. tableview.tableHeaderView 设置tableView的头部视图 一般用于放广告

4>. tableview.tableFooterView 设置tableView的底部视图 一般用于放置加载更多按钮

5>. [self.tableView reloadData]; 刷新表格 // 刷新指定行

NSIndexPath path = [NSIndexPath indexPathForRow:row inSection:0]; [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight];

4. 优化cell的方法

2>.如果缓存池中没有符合条件的cell,就自己创建一个Cell if (nil == cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; }

3>.创建Cell, 并且设置一个的标记 : identifier 注 : 定义变量 NSString identifier 用 static定义静态局部变量,不用宏.

4>.设置cell数据并返回cell

5. tableView方法

1>. - (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath{} //当某一行被选中的时候调用

2>. - (void)tableView:(UITableView )tableView didDeselectRowAtIndexPath:(NSIndexPath )indexPath{} //当某一行取消选中的时候调用

3>. UIAlertView的一些属性和方法

1). UIAlertView alert = [[UIAlertView alloc] initWithTitle:@"修改数据" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; //创建一个弹窗

2). alert.alertViewStyle = UIAlertViewStyle...; //设置alert的样式, 让alert显示出uitextfield

3). UITextField textField = [alert textFieldAtIndex:0]; //获取alert中的textfield

4). [alert show]; //显示弹窗

5). - (void)alertView:(UIAlertView )alertView clickedButtonAtIndex:(NSInteger)buttonIndex{} // alertView的按钮被点击的时候就会调用

6. 自定义cell两种方式

1>. 纯代码:每个cell子控件的个数和位置不一样

2>. 通过xib: cell一样且固定的界面 加载xib的方式:

1). [[[NSBundle mainBundle] loadNibNamed:@"xib名" owner:nil options:nil] firstObject];

2).UINib nib = [UINib nibWithNibName:@"xib名" bundle:nil]; UIView view = [[nib instantiateWithOwner:nil options:nil]firstObject]; 3>. 延迟调用 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ }); 4>.init方法只有通过代码创建控件的时候才会调用; awakeFromNib方法在控件通过xib或者storyboard创建的时候才会调用

5>. 协议规范 协议名称 : 控件名称 + Delegate 协议方法名称:控件名称去掉前缀 + 含义 在协议方法中将自己(触发发放的)控件传出去的目的是方便用于区分哪个控件触发了该方法

6>. 代码创建的子控件,添加到contentView中 [self.contentView addSubview:子控件];

7>. 计算文字宽高 CGSize maxSize = CGSizeMake(300, MAXFLOAT); // 设置文字范围 NSDictionary dict = @{NSFontAttributeName : font}; // 字体 // 如果将来计算的文字的范围超出了指定的范围,返回的就是指定的范围 // 如果将来计算的文字的范围小于指定的范围, 返回的就是真实的范围 CGSize size = [NSString str boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size; // 计算文字宽高

8>.通过代码自定义cell的方法

1).新建一个继承自UITableViewCpublic void comScroll ()ell的类

2).重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame, 子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的)

6).frame模型数据的初始化已经采取懒加载的方式(每一个cell对应的frame模型数据只加载一次)

7. 通知机制

1>. 通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 创建通知中心 NSNotificationCenter center = [NSNotificationCenter defaultCenter];

2>. 一个完整的通知一般包含3个属性: - (NSString )name; // 通知的名称 - (id)object; // 通知发布者(是谁要发布通知) - (NSDictionary )userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)

3>. 初始化一个通知(NSNotification)对象 + (instancetype)notificationWithName:(NSString )aName object:(id)anObject; + (instancetype)notificationWithName:(NSString )aName object:(id)anObject userInfo:(NSDictionary )aUserInfo; - (instancetype)initWithName:(NSString )name object:(id)object userInfo:(NSDictionary )userInfo;

4>. 通知中心(NSNotificationCenter)提供了相应的方法来发布通知 - (void)tNotification:(NSNotification )notification; // 发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息等 - (void)tNotificationName:(NSString )aName object:(id)anObject; // 发布一个名称为aName的通知,anObject为这个通知的发布者 - (void)tNotificationName:(NSString )aName object:(id)anObject userInfo:(NSDictionary )aUserInfo; // 发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息

5>.注册通知(Observer) - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString )aName object:(id)anObject; observer:,即谁要接收这个通知 aSelector:收到通知后,回调的这个方法,并且把通知对象当做参数传入 aName:通知的名称。如果为nil,那么无论通知的名称是什么,都能收到这个通知 anObject:通知发布者。如果为anObject和aName都为nil,都收到所有的通知

6>. 取消注册通知 通知中心不会保留(retain)对象,在通知中心注册过的对象,必须在该对象释放前取消注册。否则,当相应的通知再次出现时,通知中心仍然会向该发送消息。因为相应的对象已经被释放了,所以可能会导致应用崩溃 - (void)removeObserver:(id)observer; - (void)removeObserver:(id)observer name:(NSString )aName object:(id)anObject; 一般在销毁之前取消注册(如在中加入下列代码): - (void)dealloc { //[super dealloc]; 非ARC中需要调用此句 [[NSNotificationCenter defaultCenter] removeObserver:self]; }

7>. 通知和的选择

1).共同点

利用通知和都能完成对象之间的通信

2).不同点

: 一对一关系(1个对象只能告诉另1个对象发生了什么事情)

通知 : 多对多关系(1个对象能告诉N个对象发生了什么事情, 1个对象能得知N个对象发生了什么事情)

8. 键盘通知 UIKeyboardWillShowNotification // 键盘即将显示 UIKeyboardDidShowNotification // 键盘显示完毕 UIKeyboardWillHideNotification // 键盘即将隐藏 UIKeyboardDidHideNotification // 键盘隐藏完毕 UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变 UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕 附带跟键盘有关的额外信息(字典),字典常见的key如下: UIKeyboardFrameBeginUserInfoKey // 键盘刚开始的frame UIKeyboardFrameEndUserInfoKey // 键盘最终的frame(动画执行完毕后) UIKeyboardAnimationDurationUserInfoKey // 键盘动画的时间 UIKeyboardAnimationCurveUserInfoKey // 键盘动画的执行节奏(快慢) 9. 其他 1>. 子控件不显示排错方法

1).查看是否调用添加的方法

2).frame为空(没有设置frame)

3).hidden 是否为yes

4).alpha <=0.1

5).没有添加到父控件中

6).查看夫控件有没有以上几点 但凡在init方法中获取到的frame都是0 - (void)layoutSubviews { [super layoutSubviews]; // 该方法在控件的frame被改变的时候就会调用 // 该方法一般用于调整子控件的位置 } 2>. // 已经被添加到父视图上的时候会调用 - (void)didMoveToSuperview { } // 即将被添加到父视图上的时候会调用 - (void)willMoveToSuperview:(UIView )newSuperview { }

4>. // 设置btn中的不填充整个imageview btn.imageView.contentMode = UIViewContentModeCenter; // 超出范围的不要剪切 // btn.imageView.clipsToBounds = NO; btn.imageView.layer.masksToBounds = NO;

IOS 怎么用UIScrollView来滚动和缩放他的内容篇

#demo{ition:absolute;left:0;width:;height:800px;background:red;display:none;}

本篇文章来自于互联网资料翻译

我们可以通过 controller.itions.length 来确定 controller 被几个可滚动组件使用。

UIScrollView是在IOS最有用的控件之一。他是一个来展现超过一个屏幕的内容的很好的方式。下面有很多的技巧来使用他。

public boolean dispatchKeyEvent (KeyEvent nt)

这篇文章就是关于UIScrollView的,深入浅出,看看我们接下来学习的内容:

1:怎么用UIScrollView来展一个比较大的

2:当UIScrollView缩放的时候怎么一直保持在中间

3:在UIScrollView里面怎么嵌入一个复杂的视图层次

4:UIScrollView的特性怎么和UIPageControl一起来浏览多个页面的内容

5:创建一个UIScrollView滚动视图在上面能看到下一页和上一页的一部分并且还能看到当前页面。这就像appstore的一个浏览app的一个效果。

这篇文章是IOS5.0以上 xcode4.5的环境

我们开始创建一个项目如下图:

Image

我们填上项目的名字还有你创建appid时候写的公司标识,还有类名字的前缀,设置我们的设备是iPhone我们暂时只支持iPhone的模式,选择单视图模版。选择下一步并且选择保存位置。

由于我们介绍UIScrollView的4个效果,因此我们创建一个tableView,每个cell会出现一个新的视图并且展现一个效果。

Image(1)

上面这个图显示现在你的storyboard是什么样的当你完成的时候。

我们编译UITableView的导航,接下来我们要做的是:

1:打开MainStroyboard.storyboard并且点击系统模版给我们创建的个初始化场景。

2:然后我们添加一个UITableViewController从对象库然后放到storyboard。

3:现在选择tableView你刚才添加的然后选择Editor,然后Embed in,NigationController。

5:,设置tableView的section是一个,有4个cell,设置cell是basic类型。然后把他们的lables改为Image scroll,Custom View scroll,paged paged with peeking

保存这个storyboard ,并且编译运行。你应该看到你的tableView。如下图:

滚动缩放一个大:

我们接下来要做的是学习怎么用UIScrollView来缩放和滚动一个大的。

步你需要设置这个Viewcontroller,选择ViewController.h 并且添加一个UIScrollView的outlet。让你的Controller符合UIScrollView的UIScrollViewDelegate协议如下

代码

#import

@intece ViewController : UIViewController

@property (nonatomic, strong) IBOutlet UIScrollView scrollView;

@end

代码

然后在在ViewController.m设置实现属性

@synthesize scrollView = _scrollView;

回到storyboard,从对象库拖拽一个Viewcontroller并且设置他的类是Viewcontroller。

Image(4)

从对象库拖拽一个UIScrollView到Viewcontroller上并且填充。

现在在Viewcontroller.m中的延展中添加属性和方法。这些属性方法是私有的。

然后添加

@synthesize imageView = _imageView;

现在我们开始设置我们的UIScrollView了在viewDidLoad和viewVillAppear

用下面代码:

代码

- (void)viewDidLoad {

[super viewDidLoad];

// 1

UIImage image = [UIImage imageNamed:@"photo1.png"];

self.imageView = [[UIImageView alloc] initWithImage:image];

self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image.size};

[self.scrollView addSubview:self.imageView];

// 2

self.scrollView.contentSize = image.size;

// 3

UITapGestureRecognizer doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewDoubleTapped:)];

doubleTapRecognizer.numberOfTapsRequired = 2;

doubleTapRecognizer.numberOfTouchesRequired = 1;

[self.scrollView addGestureRecognizer:doubleTapRecognizer];

UITapGestureRecognizer twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped:)];

twoFingerTapRecognizer.numberOfTouchesRequired = 2;

[self.scrollView addGestureRecognizer:twoFingerTapRecognizer];

}- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

// 4

CGRect scrollViewFrame = self.scrollView.frame;

CGFloat scaleWidth = scrollViewFrame.size.width / self.scrollView.contentSize.width;

CGFloat scaleHeight = scrollViewFrame.size.height / self.scrollView.contentSize.height;

CGFloat minScale = MIN(scaleWidth, scaleHeight);

self.scrollView.minimumZoomScale = minScale;

// 5

self.scrollView.maximumZoomScale = 1.0f;

self.scrollView.zoomScale = minScale;

// 6

[self centerScrollViewContents];

}代码

上面的代码看起来有点复杂。因此我们停下来一步步的分析下。

1:步,你需要创建一个UIImageView,设置他的Image属性,然后设置UIImageView的坐标,并且添加到UIScrollView上

2:然后我们设置UIScrollView的contentSize,这样做的目的是让UIScrollView知道他自己能向横方向和竖方向滚动多远或者说多少像素。

3:然后向UIScrollView上面添加了两个手势:一个是双击手势来缩小,另一个两个手指单击来放大。

4:接下来我们需要计算UIScrollView的最小缩放比例。缩放比例是1意味着UIScrollView的内容是正常大小展示。小于1,展示内容放大,当

大于1说明内容缩小。为了得到最小缩放比例,你需要计算你缩放多少才能让舒适的展示到UIScrollView据他的宽度。然后你根据他的高度做相同的计算。比较这两个缩放比例的最小的一个设置为UIScrollView最小缩放比例。给你一个缩放比例然后你可以看到整张当放大的时候。

5:你设置缩放比例为1,因为缩放的比分辨率大你看会模糊。你设置初始缩放为最小缩放比例。因此这个可以开始充分放大。

6:让你的永远在UIScrollView中间当缩放时候。

代码

- (void)centerScrollViewContents {

CGSize boundsSize = self.scrollView.bounds.size;

CGRect contentsFrame = self.imageView.frame;

if (contentsFrame.size.width < boundsSize.width) {

contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;

contentsFrame.origin.x = 0.0f;

}if (contentsFrame.size.height < boundsSize.height) {

contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;

contentsFrame.origin.y = 0.0f;

}self.imageView.frame = contentsFrame;

}如果UIScrollView的bounds大小大于UIImageViewframe的大小,那么的坐标就是条件为真时计算的结果,相反就是原始坐标。- (void)scrollViewDoubleTapped:(UITapGestureRecognizer)recognizer {

// 1

CGPoint pointInView = [recognizer locationInView:self.imageView];

// 2

CGFloat newZoomScale = self.scrollView.zoomScale 1.5f;

newZoomScale = MIN(newZoomScale, self.scrollView.maximumZoomScale);

// 3

CGSize scrollViewSize = self.scrollView.bounds.size;

CGFloat w = scrollViewSize.width / newZoomScale;

CGFloat h = scrollViewSize.height / newZoomScale;

CGFloat x = pointInView.x - (w / 2.0f);

CGFloat y = pointInView.y - (h / 2.0f);

CGRect rectToZoomTo = CGRectMake(x, y, w, h);

// 4

[self.scrollView zoomToRect:rectToZoomTo animated:YES];

}代码

1:获得你点击的坐标位置.

2:接下来计算缩放比例缩放150%,但是必须限制缩放比例

3:然后用步计算的位置计算你想要缩放的位置大小。

代码

- (void)scrollViewTwoFingerTapped:(UITapGestureRecognizer)recognizer {

// Zoom out slightly, capping at the minimum zoom scale specified by the scroll view

CGFloat newZoomScale = self.scrollView.zoomScale / 1.5f;

[self.scrollView setZoomScale:newZoomScale animated:YES];

}代码

这类似放大的方式。

- (UIView)viewForZoomingInScrollView:(UIScrollView )scrollView {

// Return the view that you want to zoom

return self.imageView;

}这是UIScrollView缩放机制的灵魂地方。当UIScrollView完成缩放时候你告诉他是哪个视图在UIScrollView里面实现了缩放。

- (void)scrollViewDidZoom:(UIScrollView )scrollView {

// The scroll view has zoomed, so you need to re-center the contents

[self centerScrollViewContents];

}这个方法是当UIScrollView完成缩放时候,你需要通知视图在UIScrollView中间,否则UIScrollView缩放不自然。

编译运行项目出现上图效果,你可以试着放大缩小滚动。

如何判断ScrollView滑动到部

direction 滚动方向:FOCUS_UP表示向上翻一页,FOCUS_DOWN表示向下翻一页。

参考下面代码来实现:

ScrollPosition是用来保存可滚动组件的滚动位置的。一个ScrollController对象可以同时被多个可滚动组件使用,ScrollController会为每一个可滚动组件创建一个ScrollPosition对象,这些ScrollPosition保存在ScrollController的itions属性中(List)。ScrollPosition是真正保存滑动位置信息的对象,offset只是一个便捷属性

//childView是scrollview里包含的Linearlayout容器

View childView = scrollView.getChildAt0);

if(mLastY == (childView.getHeight()-scrollView.getHeight())){ 此处if为判断条件

//滑动到底部

//TODO

twoFingerTapRecognizer.numberOfTapsRequired = 1;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息