对比:LongPressTest

Swift 

import UIKit

let MARGINE: CGFloat = 20
let BUTTON_WIDTH: CGFloat = 80
let BUTTON_HEIGHT: CGFloat = 30
let CELL_WIDTH: CGFloat = 100
let CELL_HEIGHT: CGFloat = 40

class ViewController: UIViewController {

    var btnIndex = 0
    
    // 创建一个NSMutableArray集合,用于保存多个按钮
    var btnArr = NSMutableArray()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        addlongPress()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

extension ViewController{
    
    func addlongPress(){
        // 创建一个手势处理器,用于检测、处理长按手势
        let gesture = UILongPressGestureRecognizer(target: self, action: "longPress:")
        // 为该控件添加手势处理器
        self.view.addGestureRecognizer(gesture)
    }
    
    func longPress(gesture: UILongPressGestureRecognizer){
        // 创建一个按钮
        let btn = UIButton(type: .Custom)
        //设置颜色
        btn.backgroundColor = UIColor.grayColor()
        // 获取NSArray中已经包含了几个按钮
        let count = btnArr.count
        // 计算当前添加的按钮位于第几行、第几列
        let row = count / 3
        let col = count % 3
        
        // 为该按钮设置文本
        btn.setTitle("按钮\(btnIndex)", forState: .Normal)
        // 设置该bn按钮的大小和位置
        btn.frame = CGRectMake(MARGINE + CGFloat(col) * CELL_WIDTH,CGFloat(row) * CELL_HEIGHT + MARGINE, BUTTON_WIDTH , BUTTON_HEIGHT)
        // 为该按钮添加事件处理方法
        btn.addTarget(self, action: "remove", forControlEvents: .TouchUpInside)
        
        // 将按钮添加到应用界面的UIView控件中
        self.view .addSubview(btn)
        //存入数组
        btnArr.addObject(btn)
        btnIndex++
    }
    
    func remove(sender: AnyObject){
        // 删除事件源控件(激发该事件的按钮)
        sender.removeFromSuperview()
        // 将触发该事件的按钮从NSMutableArray集合中删除
        btnArr .removeObject(sender)
        self.rearrange()
    }
    
    func rearrange(){
        // 重新计算每个按钮的大小和位置
        for var i = 0 ; i < btnArr.count; i++
        {
            let row = i / 3
            let col = i % 3
            let btn = btnArr.objectAtIndex(i) as! UIButton
            btn.frame = CGRectMake(MARGINE + CGFloat(col) * CELL_WIDTH, CGFloat(row) * CELL_HEIGHT + MARGINE , BUTTON_WIDTH , BUTTON_HEIGHT)
        }
    }
}


Objective-C

#import "FKViewController.h"

#define MARGINE 20
#define BUTTON_WIDTH 80
#define BUTTON_HEIGHT 30
#define CELL_WIDTH 100
#define CELL_HEIGHT 40


@interface FKViewController ()
{
    NSInteger btnIndex;
    NSMutableArray* btnArr;
}
@end

@implementation FKViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addlongPress];
}

- (void)addlongPress
{
    // 创建一个NSMutableArray集合,用于保存多个按钮
    btnArr = [[NSMutableArray alloc] init];
    // 创建一个手势处理器,用于检测、处理长按手势
    UILongPressGestureRecognizer* gesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self
                                                                                         action:@selector(longPress:)];
    // 为该控件添加手势处理器
    [self.view addGestureRecognizer:gesture];
}

- (void)longPress:(UILongPressGestureRecognizer*)gesture
{
	// 创建一个按钮
	UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
    //设置颜色
    btn.backgroundColor = [UIColor grayColor];
	// 获取NSArray中已经包含了几个按钮
	NSInteger count = btnArr.count;
	// 计算当前添加的按钮位于第几行、第几列
	NSInteger row = count / 3;
	NSInteger col = count % 3;
	
    // 为该按钮设置文本
	[btn setTitle:[NSString stringWithFormat:@"按钮%ld", (long)btnIndex]
		forState:UIControlStateNormal];
	// 设置该btn按钮的大小和位置
	btn.frame = CGRectMake(MARGINE + col * CELL_WIDTH, row * CELL_HEIGHT + MARGINE , BUTTON_WIDTH , BUTTON_HEIGHT);
	// 为该按钮添加事件处理方法
	[btn addTarget:self
            action:@selector(remove:)
  forControlEvents:UIControlEventTouchUpInside];
    
	// 将按钮添加到应用界面的UIView控件中
	[self.view addSubview:btn];
    //存入数组
    [btnArr addObject:btn];
	btnIndex ++;
}

- (void) remove:(id)sender
{
	// 删除事件源控件(激发该事件的按钮)
	[sender removeFromSuperview];
	// 将触发该事件的按钮从NSMutableArray集合中删除
	[btnArr removeObject:sender];
    
	[self rearrange];
}
- (void) rearrange
{
	// 重新计算每个按钮的大小和位置
	for(int i = 0 ; i < btnArr.count; i ++)
	{
		NSInteger row = i / 3;
		NSInteger col = i % 3;
		UIButton* btn = [btnArr objectAtIndex:i];
		btn.frame = CGRectMake(MARGINE + col * CELL_WIDTH, row * CELL_HEIGHT + MARGINE , BUTTON_WIDTH , BUTTON_HEIGHT);
	}
}
@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值