1.移动label
-(void)createLabel{
for (int i = 0; i < 3; i++) {
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(110, 80 + 120*i, 100, 100)];
label.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
//手动打开label的交互
label.userInteractionEnabled = YES;
label.tag = 100 + i;
[self.view addSubview:label];
[label release];
}
}
UITouch的协议
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"开始触摸,可在此设置收键盘");
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"触摸事件中断,系统级别的中断,比如触摸过程中有电话进来");
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"触摸结束");
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"移动");
//touches:集合,里面存放的是多个UITouch的对象
for (UITouch *touch in touches) {
//每个UITouch的对象,可以得到所触摸的视图 --> touch.view
if ([touch.view isKindOfClass:[UILabel class]]) {
//如果当前触摸的是UILabel --> 调整label的center
//先获取touch在视图中的位置
CGPoint pt = [touch locationInView:self.view];
touch.view.center = pt;
[self.view bringSubviewToFront:touch.view];
}
}
}
2.拼图
-(void)createInterface{
for (int i = 0; i < 9; i++) {
UIImageView *iv = [[UIImageView alloc]initWithFrame:CGRectMake(5 + 105*(i%3), 80 + 105*(i/3), 100, 100)];
UIImage *image = [self clipImage:[UIImage imageNamed:@"king1"] inRect:CGRectMake(0 + 100*(i%3), 0 + 100*(i/3), 100, 100)];
iv.userInteractionEnabled = YES;
if (i < 8) {
iv.image = image;
}
else{
iv.backgroundColor = [UIColor whiteColor];
iv.tag = 200;
}
[self.view addSubview:iv];
[iv release];
}
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//获取空白imageview
UIImageView *whiteIv = (UIImageView *)[self.view viewWithTag:200];
for (UITouch *touch in touches) {
//判断触摸的imageview和空白imageview的中心点的距离。如果距离==105 --> 相邻,可以移动(交互位置);否则 --> 不能移动(交换位置)
if ([touch.view isKindOfClass:[UIImageView class]]) {
int disX = abs(whiteIv.center.x - touch.view.center.x);
int disY = abs(whiteIv.center.y - touch.view.center.y);
if (disX + disY == 105) {
//交换 --> center / frame
CGPoint pt = whiteIv.center;
whiteIv.center = touch.view.center;
touch.view.center = pt;
}
}
}
}
切割图片
//第一个参数:要进行切割的图片元素
//第二个参数:要切的范围
-(UIImage *)clipImage: (UIImage *)image inRect: (CGRect) rect
{
//获取父图片要切的位置
CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, rect);
//用子图片来接收切割出来的图片
UIImage *subImage = [UIImage imageWithCGImage:imageRef];
return subImage;
}