一个类似苹果桌面上长按删除app的…

一个类似苹果桌面上长按删除app的效果,就是当你长按屏幕时,会出现缩小图片并出现删除按钮,点击删除按钮,删除图片并且后面图片前移。

当再次点击图片,恢复。点击图片有处理事件,可以在此做一些处理。


实现思路以及核心代码:

继承于UIScrollView,先在上面创建出所有的view,在每个view上添加单击手势,在uiscrollView上添加长按手势。


[cpp] view plaincopy


  1. //创建所有的view  
  2. (void)createView  
  3.  
  4.     0;  
  5.     0;  
  6.     width self.frame.size.width /Column;  
  7.     for (int 0; i<_imageArray.count; i)  
  8.         (i%Column)*width;  
  9.         (i/Column)*(ImageHeightSpace);  
  10.           
  11.         if (i%Column != 0)  
  12.             x=Space*(i%Column);  
  13.          
  14.           
  15.         //bgView  
  16.         UIView *bgView [[UIView alloc]initWithFrame:CGRectMake(x, y, width, ImageHeight)];          
  17.         CALayer *imageLayer bgView.layer;  
  18.         [imageLayer setMasksToBounds:YES];  
  19.         [imageLayer setCornerRadius:3];  
  20.         bgView.tag  BgViewTag;  
  21.         [self addSubview:bgView];  
  22.           
  23.         //添加图像  
  24.         UIImageView *imageView [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, bgView.frame.size.width, bgView.frame.size.height)];  
  25.         imageView.image [Util imageBy:[UIImage imageNamed:[_imageArray objectAtIndex:i]] withWidth:imageView.frame.size.width*2 withHight:imageView.frame.size.height*2];  
  26.         [bgView addSubview:imageView];  
  27.           
  28.         //添加删除按钮  
  29.         UIButton *button [UIButton buttonWithType:UIButtonTypeCustom];  
  30.         button.frame CGRectMake(bgView.frame.size.width 24, 0, 24, 24);  
  31.         [button setBackgroundImage:[UIImage imageNamed:@"delete"forState:UIControlStateNormal];  
  32.         button.tag BtnTag i;  
  33.         [button addTarget:self action:@selector(buttonChange:) forControlEvents:UIControlEventTouchUpInside];  
  34.         [bgView addSubview:button];  
  35.         button.hidden YES;  
  36.           
  37.         //bgview上添加点击手势事件  
  38.         UITapGestureRecognizer *tapGestureRecognizer [[UITapGestureRecognizer  alloc] initWithTarget:self action:@selector(tapOnContentView:)];  
  39.         [bgView addGestureRecognizer:tapGestureRecognizer];  
  40.           
  41.           
  42.      
  43.     //  
  44.     self.contentSize CGSizeMake(self.frame.size.width, yImageHeight);  
  45.     //长按手势  
  46.     UILongPressGestureRecognizer *longGesture [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressGestureRecognizer:)];  
  47.     [self addGestureRecognizer:longGesture];  
  48.  




当你删除时,使其每个view上的删除按钮出现hidden=no,并view缩小


[cpp] view plaincopy


  1. //是否编辑中  
  2. (void)editView:(BOOL)isEdit  
  3.  
  4.     _edit isEdit;  
  5.     for (UIView *view in self.subviews)  
  6.      
  7.         for (UIView *v in view.subviews)  
  8.          
  9.             //所有的uibutton是否显示  
  10.             if ([v isMemberOfClass:[UIButton class]])  
  11.                 [v setHidden:!isEdit];  
  12.          
  13.      
  14.       
  15.     //缩小大小  
  16.     float scale;  
  17.     if (_edit)  
  18.         scale 0.9;  
  19.     }else 
  20.         scale 1.0;  
  21.      
  22.       
  23.     for (UIView *view in self.subviews)  
  24.      
  25.         //动画缩小,放大  
  26.         [UIView animateWithDuration:0.1 delay:0.1 options:0  animations:^  
  27.           
  28.              view.transform=CGAffineTransformMakeScale(scale, scale);  
  29.          completion:^(BOOL finished)  
  30.           
  31.                
  32.          }];  
  33.      
  34.  



当你删除一个应用时,把UIScrollView上所有的view遍历一遍。把当前view删除,并使其后面的view.frame==前面的view.frame,并动画移动后面的view


[cpp] view plaincopy


  1. //删除view  
  2. -(void)buttonChange:(UIButton*)sender  
  3.  
  4.     NSArray *views self.subviews;  
  5.     __block CGRect newframe;  
  6.     int index sender.tag BtnTag;  
  7.     for (int index; [_imageArray count]; i)  
  8.      
  9.         UIView *obj [views objectAtIndex:i];  
  10.         __block CGRect nextframe obj.frame;  
  11.         if (i == index)  
  12.          
  13.             //删除这个view  
  14.             [obj removeFromSuperview];  
  15.          
  16.         else  
  17.          
  18.             for (UIView *v in obj.subviews)  
  19.              
  20.                 //把每个按钮的tag从重设置  
  21.                 if ([v isMemberOfClass:[UIButton class]])  
  22.                  
  23.                     v.tag iBtnTag 1;  
  24.                     break 
  25.                  
  26.              
  27.             //并且位置动画改变  
  28.             [UIView animateWithDuration:0.6 animations:^  
  29.               
  30.                  obj.frame newframe;  
  31.              completion:^(BOOL finished)  
  32.               
  33.                    
  34.              }];  
  35.          
  36.         //记住上一个view的位置   
  37.         newframe nextframe;  
  38.      
  39.     //数组移除   
  40.     [_imageArray removeObjectAtIndex:index];  
  41.   
  42. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值