41.利用bitmap生成圆形图片 平铺背景 touch事件

本文介绍了一种使用Objective-C编程语言将普通图片转换成圆形图片的方法。通过创建自定义的图片上下文并绘制两个不同大小的圆形,最终实现圆形裁剪效果。文章详细展示了如何设置图片上下文、绘制圆形路径、应用剪切以及绘制原始图片到指定区域内。
//利用一张图片生成一张圆形的图片
- (void)test1
{
    // 0. 加载原有图片,默认是有frame的,和原有图片大小真实尺寸一样
    UIImage *image = [UIImage imageNamed:@"me"];

    // 1.创建图片上下文
    CGFloat margin = 10;
    CGSize size = CGSizeMake(image.size.width + margin, image.size.height + margin);

    // YES 不透明 NO 透明
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    // 2.绘制大圆
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, size.width, size.height));
    [[UIColor whiteColor] set];
    CGContextFillPath(ctx);

    // 3.绘制小圆
    CGFloat smallX = margin * 0.5;
    CGFloat smallY = margin * 0.5;
    CGFloat smallW = image.size.width;
    CGFloat smallH = image.size.height;
    CGContextAddEllipseInRect(ctx, CGRectMake(smallX, smallY, smallW, smallH));
    //    [[UIColor greenColor] set];
    //    CGContextFillPath(ctx);
    // 4.指点可用范围, 可用范围的适用范围是在指定之后,也就说在在指定剪切的范围之前绘制的东西不受影响
    CGContextClip(ctx);

    // 5.绘图图片
    [image drawInRect:CGRectMake(smallX, smallY, smallW, smallH)];

    // 6.取出图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    self.iv.image = newImage;
    // 7.保存图片
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"aaa.png"];
    NSLog(@"%@", path);

    NSData *data = UIImagePNGRepresentation(newImage);
    [data writeToFile:path atomically:YES];
}

UIColor *color = [UIColor colorWithPatternImage:image];

利用一张图片生成一张背景图片
// 当手指在view上移动的时候调用
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//    UITouch *touch = [touches anyObject];
//     NSLog(@"touchesMoved %p", touch);

    UITouch *touch = [touches anyObject];
    // 0. 获取上一次的位置
    CGPoint prePoint = [touch previousLocationInView:self];
//    NSLog(@"prePoint = %@", NSStringFromCGPoint(prePoint));

    // 1.获取当前的位置
    CGPoint currentPoint = [touch locationInView:self];
//    NSLog(@"currentPoint = %@", NSStringFromCGPoint(currentPoint));

    CGFloat moveX = currentPoint.x - prePoint.x;
    CGFloat moveY = currentPoint.y - prePoint.y;

//    NSLog(@"moveX = %.1f", moveX);

    // 2.改变当前视图的位置,为手指指定的位置
    CGPoint temp =  self.center;
//    NSLog(@"%f,%f",self.bounds.origin.x,self.bounds.origin.y);
    temp.x += moveX;
    temp.y += moveY;
    self.center = temp;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值