今天尝试了下移动view,以前直接通过touch的事件弄过.现在用手势,更加方便.
网上别人的做法有直接改变,视图相对的原点坐标来做.代码上稍微复杂点,代码如下:
- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{
UIView *piece = [gestureRecognizer view];
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
[piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
[gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
UIView *piece = gestureRecognizer.view;
CGPoint locationInView = [gestureRecognizer locationInView:piece];
CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];
piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
piece.center = locationInSuperview;
}
}
其实还有简单点的考虑,设置一个变量来保存下之前的坐标就更加容易理解:
CGPointpointLeftTop;
- (void)onPan:(UIPanGestureRecognizer *)pan
{
CGPoint p=[pan locationInView:self.superview];
if (pan.state==UIGestureRecognizerStateBegan) {
pointLeftTop=p;
}else
if (pan.state==UIGestureRecognizerStateChanged) {
[self
setFrame:CGRectMake(self.frame.origin.x+(p.x-pointLeftTop.x),
self.frame.origin.y,
self.frame.size.width,
self.frame.size.height)];
pointLeftTop=p;
}else
if (pan.state==UIGestureRecognizerStateEnded) {
NSLog(@"end");
}
}
分享到:
相关推荐
可以实现一个View的动态移动 多种设置方法如setFillAfter、重新设置view的位置来达到View中控件的正确移动
去网上百度了很多,却没有一个是自定义正方形,期间自己画图,去思索了好久,在不断的尝试下终于,搞定了可以移动的正方形。如果有问题欢迎指正,本人QQ731712249,也可加入交流群:586620031
android跟随手指移动的view.
自定义view的六种移动方式,通过使用offsetLeftAndRight(offsetX),setLayoutParams(layoutParams)等等,还可以控制view的滚动速度
类似地图的缩放,移动,自定义的view,不是ImageView
android view随手指移动而移动,最终停留在手指离开的位置。
类似附带几个button的view,点击button的时候,实现视觉效果上是按钮在移动。
三星手机自带的smart view是很多小伙伴在用的,使用...温馨提示:三星手机系统内置有一个叫做SmartView的功能,但是SmartView仅支持通过Miracast协议来投屏,如果你的电视不支持Miracast协议,则是无法使用这个功能。
通过透明的View展示透明的界面
先从movable-view开始说起吧. movable-view是小程序自定义的组件.其描述为:”可移动的视图容器,在页面中可以拖拽...当movable-view大于movable-area时,movable-view的移动范围必须包含movable-area(x轴方向和y轴方
可移动的视图容器,在页面中可以拖拽滑动或双指缩放。 movable-view必须在movable-area组件中,并且必须是直接子节点,否则不能移动
结合EDA工具—动态仿真软件SystemView,介绍数字通信系统的仿真和分析方法以及数字通信系统设计和开发的新手段,并力求通过实例使读者掌握和精通System View动态仿真软件。 本书内容分为5章,分别介绍SystemView...
HexView_hexview如何使用_hexview教程_hexviewdll_hexBIN浏览_hexview.zip
通过Views查找 // all views tagged "coolView" under "root" List<View> coolViews = Views.find(root, "coolView"); // all ImageView views under "root" List<ImageView> imageViews = Views.find(root, ...
Android View 跟随手势移动和缩放,通过在触屏上移动和多个手指的缩放手势实现移动和缩放
实现有限制的卡牌左右滚动效果,利用Unity Scroll View组件结合DOTween插件实现。 效果为多个图片从中心点往右依次有大小缩放及层级排序,然后有一段自动移动效果,紧接着是手动控制移动效果。 压缩文件为效果图和...
View 安装5 1 服务器组件的系统要求7 View 连接服务器的要求7 View Administrator 的要求9 View Composer 的要求9 2 客户机操作系统的系统要求13 View Agent 支持的操作系统13 独立 View Persona Management 支持的...
借用QT中的QGraphicsView类实现窗口滑动
介绍如何通过长按手势来移动 table view中的cell
自定义View流程以及onTouch移动处理等