实现类似iOS拍照的按钮滑动功能

实现类似iOS拍照的按钮滑动功能,第1张

先上效果图:

有不足的地方请多多指教!

由于工作,我也是边工作边学习自定义,多亏了 辉哥的指教 ,在此谢谢!

下面进入正题:

我们要实现的是,实现类似iOS拍照的按钮滑动功能,这里就以最近项目中用到的开始、暂停、停止为准,度娘了一下,发现没有,于是决定自己搞吧!

需求分析:

1:进入项目就只有暂停按钮居中,(所有按钮纵坐标不变)

2:点击暂停按钮,暂停按钮消失,开始和停止按钮向两边滑动至屏幕的(1/6-按钮宽度的一半)和(5/6-按钮宽度的一半)

3:点击开始按钮,开始按钮和停止按钮向中间滑动,当重合时显示,暂停按钮显示

一:继承RelativeLayout,复写其中三个方法,在第三个方法中获取屏幕宽度,并分成三等分,分别获取到这三等分的各自中点

1获取屏幕宽度方法:

2复写其中三个方法,并分成三等分,分别获取到这三等分的各自中点

二、待布局加载完成获取子view,先获取子view的数量就是三个:开始、暂停、停止

三、接下来就是在初始摆放控件的方法里面进行进行监听、位置摆放等 *** 作

1设置暂停按钮的初始位置(中点不行),并设置开始按钮和停止按钮的监听,默认三个按钮需要到达的位置为:

开始:屏幕宽度的六分之一减去按钮宽度的一半

暂停:屏幕宽度的一半减去按钮宽度的一半

停止:屏幕宽度的六分之五减去按钮宽度的一半

2。因为默认是在进行中所以进入项目就只有暂停按钮,点击暂停按钮就涉及三个按钮的动画:暂停按钮消失、开始按钮向左滑动、停止按钮向右滑动

点击暂停:创建动画集合,分别创建开始和停止的属性动画,最后将开始和停止一起加入动画集合,然后start

3点击开始按钮就涉及三个按钮的动画:开始按钮向右滑动、停止按钮向左滑动,当开始按钮坐标到达暂停按钮时,暂停按钮显示、开始和停止按钮消失

点击开始:创建动画集合,分别创建开始和停止的属性动画,最后将开始和停止一起加入动画集合,然后start

四、接下来在xml文件中加入刚写好的布局,在布局中随便加入三个按钮:开始,暂停,停止

然后运行,OK!

github: demo地址

前几天在开发过程中遇到了scrollview不能滑动的问题,然后就顺便总结了以下的几个原因:

1、contentSize 这个属性,比uiscrollview的frame要小, 无需滚动, 自然就滚动不了。 scrollenabled 这个属性,标识着是否允许滚动,要言设成yes

2、如果这个scrollView是在IB里面生成的话,还得手动设置它的contentSize,并且不能在initWithNibName:bundle:里面设置,因为:

The nib file you specify is not loaded right away It is loaded the first time the view controller’s view is accessed If you want to perform additional initialization after the nib file is loaded, override the viewDidLoad method and perform your tasks there

3、在selfview上添加scrollview 能正常滚动,但再次添加其他的view的时候,就不能正常滚动了,必须用下面的一个方法才行,很好用。

附加:

这个方法在controller的的子视图的position和size被改变的时候被调用。

在view 已经被设计好了它的subviews并且还没有被展示在屏幕上时候,可以调用此方法改变这个view。

关键点是改变边界。任何依赖于bounds,并且需要去完成的 *** 作都应该放在viewDidLayoutSubviews中,而不是viewDidLoad或viewWillAppear中。

因为view的frame和bounds直到Auto Layout 已经完成工作的时候才会被确定,所以在执行完Auto Layout之后会调用此方法。

小程序实现满屏上下滑动效果

写的时候发现网上没有好用的,要么过于复杂,要么不太实用,我就自己整了个简单的

直接上代码部分

//wxml部分

<swiper indicator-dots="true" indicator-color="green" indicator-active-color="red" autoplay="true" interval="5000" duration="1000" circular="true" vertical="true">

<swiper-item wx:for="{{images}}">

<image src="{{item}}" mode="scaleToFill"></image>

</swiper-item>

</swiper>

下面是js部分,大部分都是自动生成的函数,只要在data里面存放地址就行,其他的可以不用管

// pages/template/templatejs

Page({

/

页面的初始数据

/

data: {

images: ["/pages/template/images/1png","/pages/template/images/2png","/pages/template/images/3png","/pages/template/images/4png"]

},

/

生命周期函数--监听页面加载

/

onLoad: function (options) {

},

/

生命周期函数--监听页面初次渲染完成

/

onReady: function () {

},

/

生命周期函数--监听页面显示

/

onShow: function () {

},

/

生命周期函数--监听页面隐藏

/

onHide: function () {

},

/

生命周期函数--监听页面卸载

/

onUnload: function () {

},

/

页面相关事件处理函数--监听用户下拉动作

/

onPullDownRefresh: function () {

},

/

页面上拉触底事件的处理函数

/

onReachBottom: function () {

},

/

用户点击右上角分享

/

onShareAppMessage: function () {

}

})

效果图

iphone5表现效果

在这里插入描述

iphone 12/13 Pro Max表现效果

在这里插入描述

本人前端一般般,可能会有问题,仅供参考

[UIView animateWithDuration:your_time animations:^{ //in here change the frame of your view } completion:^(BOOL finished) { //do something you want to }];建议楼主多看文档和博客,这么简单的问题你百度一下大把的,官方文档介绍的也更详细

您好,具体思路是使用NSTimer的类方法

+ (NSTimer )scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

使用这个类方法,可以让您在某个规定的时间内进行一个动作(target:(id)和selector:(SEL)),只要在这个动作中设置带有动画切换的uiview页面就可以进行循环页面滑动了 ,或者您也可以直接用UIScrollView和UIPageControl来控制页面滑动的分隔

1、拍击UITapGestureRecognizer (任意次数的拍击)

2、向里或向外捏UIPinchGestureRecognizer (用于缩放)

3、摇动或者拖拽UIPanGestureRecognizer (拖动)

4、擦碰UISwipeGestureRecognizer (以任意方向)

5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)

6、长按UILongPressGestureRecognizer (长按)

UIButton btn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

btnbackgroundColor = [UIColor redColor];

[selfview addSubview:btn];

UIPanGestureRecognizer pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];//创建手势

[btn setUserInteractionEnabled:YES]; //设置启用用户交互

[btn addGestureRecognizer:pan];//把手势添加到控件

- (void) handlePan: (UIPanGestureRecognizer )rec{

// NSLog(@"xxoo---xxoo---xxoo");

CGPoint point = [rec translationInView:selfview];

//该方法返回在横坐标上、纵坐标上拖动了多少像素

NSLog(@"%f,%f",pointx,pointy);

recviewcenter = CGPointMake(recviewcenterx + pointx, recviewcentery + pointy);

//recview 指的是把rec添加到那个控件上的

// 因为拖动起来一直是在递增,所以每次都要用setTranslation:方法制0这样才不至于不受控制般滑动出视图

[rec setTranslation:CGPointMake(0, 0) inView:selfview];

}

//缩放

UIPinchGestureRecognizer ping = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];

[btn setUserInteractionEnabled:YES]; //设置启用用户交互

[btn addGestureRecognizer:ping];

-(void) handlePinch:(UIPinchGestureRecognizer )rec

{

NSLog(@" recognizerscale------%f",recscale

);//缩放的倍数,

// viewtransform 为原来的 状态;

recviewtransform=CGAffineTransformScale(recviewtransform, recscale,recscale);

}

最近在做一款ios的app,其中有一个页面需要分成三个版块,版块之间可以通过左右滑动来进行切换,也可以通过点击上方的按钮来切换,好像在android中可以用过ViewPager + Fragment来实现。界面大概就是这个样子,这里我以知乎客户端的发现页面为例:

其中整个页面分为三个小的版块,分别"推荐","热门"以及"收藏"。点击上方的文字后,下方的页面会切换到对应的版块,同时文字下方的蓝色导航条也会随着界面的切换跟着滑动。另外,当我们不通过按钮切换,用手势在页面上左右滑动时,导航条也会跟着一起滑动。功能大概就是这个样子。

下面简单分析下实现原理。首先在"发现"的下方应该有UIView,在UIView中放有3个UIButton。至于文字下方的导航条,可以用UILabel来做,宽度等于一个按钮的宽度,并将背景色改为蓝色。导航条下方的页面可以通过手势来左右滑动,首先想到的应该就是,这是一个UIScrollView,我们需要将scrollView的contentSize属性设置成三个页面宽度的大小,否则会无法滑动页面。然后在scrollView放上三个版块的页面,这个根据自身的业务情况而定,一般UITableView用得比较多。最后,怎样才能让页面滑动的时候导航条也跟着移动的?在Android中,一般的做法就是给scrollView中添加一个事件监听器,用来监听滑动事件,并在事件处理函数中执行响应的逻辑。在ios中没有事件监听这个概念,我们可以为scrollView设置它的代理,并在代理类中覆盖掉该方法:

设置了代理类后,代理类其实就是帮我们注册了相应的回调函数,每次scrollView只要有细微的滑动,该方法就会被调用。在方法中,需要做的就是获取scrollView当前的偏移量,然后根据这个偏移量来设定导航条的位置。

将scrollView与滚动条声明未全局变量,因为在其他方法中也会用到。

scrollView延迟初始化,在初始化时记得为其设置代理对象。

navLabel延迟初始化

将三个按钮添加到页面中,并为按钮添加点击事件处理函数。

将创建按钮的过程单独抽象出来

按钮点击后调用的函数,即切换页面

最后,在回调函数中根据scrollView的偏移量调整导航条的位置。

这是最终的效果图:

以上就是关于实现类似iOS拍照的按钮滑动功能全部的内容,包括:实现类似iOS拍照的按钮滑动功能、iOS scrollview不能滑动的几个原因及解决方法、ios微信小程序上下滑动效果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9636645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存