社区
iOS
帖子详情
UIView DrawInRect的问题
cxy147852
2018-03-10 05:32:04
我用DrawInRect在UIView里画了一些图形
如果UIView在创建的时候高度设置过大(比如20000
会导致UIView变白,图形全部消失
这是为什么?
...全文
628
2
打赏
收藏
UIView DrawInRect的问题
我用DrawInRect在UIView里画了一些图形 如果UIView在创建的时候高度设置过大(比如20000 会导致UIView变白,图形全部消失 这是为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
不担心
2018-03-11
打赏
举报
回复
这个应该是苹果图形核心库的一个限制,这个我之前有遇到过,因为苹果觉得屏幕就那么小,没有必要画出那么大尺寸的画面,等你有需要时,比如左右移动图片,需要显示的时候才开始画那部分的内容,这个问题很容易验证,你添加一个scrollView,随便就放一个label,然后你把scrollView的contenSize设置为20000或者更高,你会发现scrollView什么都不显示了,当时我也是研究好了好久才知道苹果有这个限制的
键盘舞者113
2018-03-10
打赏
举报
回复
图像自动居中
Draw
In
Rect
方法的使用:重绘文字;图片;画线;画图
使用
Draw
In
Rect
可以用来做继承于
UIView
上所有控件的事情 你可以使用它来画图 可以使用它来画直线 可以使用它画圆 当然你可以使用它来绘制文字 本质上,它是用绘图的方式实现UIImage,UiLabel,UITextView。。。。上的等等 使用这个方法的优势在于,它绕过了苹果封装好的方法,直接调用
UIview
的方法,进行绘制,所有基于
UIView
的控件效果都可以通过这个方法实现
IOS重绘View演示
IOS中
draw
Rect
方法的使用, 在需要重绘的时调用setNeedsDisplay方法
UIImageView实现触摸绘图
核心代码,使用UIImageView实现触摸绘图, 比起使用数组实现要强很多, 使用数组会很费内存,高手请过。minixx新手学习资料保存 //监听触摸事件 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [touches anyObject]; currentPoint = [touch locationInView:self]; NSLog(@"currentPoint.x = %f",currentPoint.x); NSLog(@"currentPoint.y = %f",currentPoint.y); UIGraphicsBeginImageContext(self.frame.size); [
draw
Image.image
draw
In
Rect
:CG
Rect
Make(0, 0,
draw
Image.frame.size.width,
draw
Image.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);//设置宽度 CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0);//设置颜色 CGContextBeginPath(UIGraphicsGetCurrentContext());//开始路径 CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);//起始点坐标 CGContextAddLineToPoint(UIGraphicsGetCurrentContext(),currentPoint.x, currentPoint.y);//终点坐标 CGContextStrokePath(UIGraphicsGetCurrentContext());//开始绘制 //将画好得生成image保存在原图片//////////
draw
Image.image = UIGraphicsGetImageFromCurrentImageContext();//把图形上下文 UIGraphicsEndImageContext(); lastPoint = currentPoint; // [self setNeedsDisplay]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ }
ios开发小技巧
常用代码整理: 12.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailRegex]; return [emailTest evaluateWithObject:email]; } 13.图片压缩 用法:UIImage *yourImage= [self imageWithImageSimple:image scaledToSize:CGSizeMake(210.0, 210.0)]; //压缩图片 - (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a graphics image context UIGraphicsBeginImageContext(newSize); // Tell the old image to
draw
in this newcontext, with the desired // new size [image
draw
In
Rect
:CG
Rect
Make(0,0,newSize.width,newSize.height)]; // Get the new image from the context UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); // End the context UIGraphicsEndImageContext(); // Return the new image. return newImage; } 14.亲测可用的图片上传代码 - (IBAction)uploadButton:(id)sender { UIImage *image = [UIImage imageNamed:@"1.jpg"]; //图片名 NSData *imageData = UIImageJPEGRepresentation(image,0.5);//压缩比例 NSLog(@"字节数:%i",[imageData length]); // post url NSString *urlString = @"http://192.168.1.113:8090/text/UploadServlet"; //服务器地址 // setting up the request object now NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; // NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; // NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition:form-data; name=\"userfile\"; filename=\"2.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; //上传上去的图片名字 [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:body]; // NSLog(@"1-body:%@",body); NSLog(@"2-request:%@",request); NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"3-测试输出:%@",returnString); 15.给imageView加载图片 UIImage *myImage = [UIImage imageNamed:@"1.jpg"]; [imageView setImage:myImage]; [self.view addSubview:imageView]; 16.对图库的操作 选择相册: UIImagePickerControllerSourceTypesourceType=UIImagePickerControllerSourceTypeCamera; if (![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { sourceType=UIImagePickerControllerSourceTypePhotoLibrary; } UIImagePickerController * picker = [[UIImagePickerControlleralloc]init]; picker.delegate = self; picker.allowsEditing=YES; picker.sourceType=sourceType; [self presentModalViewController:picker animated:YES]; 选择完毕: -(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info { [picker dismissModalViewControllerAnimated:YES]; UIImage * image=[info objectForKey:UIImagePickerControllerEditedImage]; [self performSelector:@selector(selectPic:) withObject:imageafterDelay:0.1]; } -(void)selectPic:(UIImage*)image { NSLog(@"image%@",image); imageView = [[UIImageView alloc] initWithImage:image]; imageView.frame = CG
Rect
Make(0, 0, image.size.width, image.size.height); [self.viewaddSubview:imageView]; [self performSelectorInBackground:@selector(detect:) withObject:nil]; } detect为自己定义的方法,编辑选取照片后要实现的效果 取消选择: -(void)imagePickerControllerDIdCancel:(UIImagePickerController*)picker { [picker dismissModalViewControllerAnimated:YES]; } 17.跳到下个View nextWebView = [[WEBViewController alloc] initWithNibName:@"WEBViewController" bundle:nil]; [self presentModalViewController:nextWebView animated:YES]; //创建一个UIBarButtonItem右边按钮 UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"右边" style:UIBarButtonItemStyleDone target:self action:@selector(clickRightButton)]; [self.navigationItem setRightBarButtonItem:rightButton]; 设置navigationBar隐藏 self.navigationController.navigationBarHidden = YES;// iOS开发之UIlabel多行文字自动换行 (自动折行)
UIView
*footerView = [[
UIView
alloc]initWithFrame:CG
Rect
Make(10, 100, 300, 180)]; UILabel *label = [[UILabel alloc]initWithFrame:CG
Rect
Make(10, 100, 300, 150)]; label.text = @"Hello world! Hello world!Hello world! Hello world! Hello world! Hello world! Hello world! Hello world!Hello world! Hello world! Hello world! Hello world! Hello world! Helloworld!"; //背景颜色为红色 label.backgroundColor = [UIColor redColor]; //设置字体颜色为白色 label.textColor = [UIColor whiteColor]; //文字居中显示 label.textAlignment = UITextAlignmentCenter; //自动折行设置 label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = 0; 30.代码生成button CG
Rect
frame = CG
Rect
Make(0, 400, 72.0, 37.0); UIButton *button = [UIButton buttonWithType:UIButtonTypeRounded
Rect
]; button.frame = frame; [button setTitle:@"新添加的按钮" forState: UIControlStateNormal]; button.backgroundColor = [UIColor clearColor]; button.tag = 2000; [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; 31.让某个控件在View的中心位置显示: (某个控件,比如label,View)label.center = self.view.center; 32.好看的文字处理 以tableView中cell的textLabel为例子: cell.backgroundColor = [UIColorscrollViewTexturedBackgroundColor]; //设置文字的字体 cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:100.0f]; //设置文字的颜色 cell.textLabel.textColor = [UIColor orangeColor]; //设置文字的背景颜色 cell.textLabel.shadowColor = [UIColor whiteColor]; //设置文字的显示位置 cell.textLabel.textAlignment = UITextAlignmentCenter; 33. ———————-隐藏Status Bar—————————– 读者可能知道一个简易的方法,那就是在程序的viewDidLoad中加入 [[UIApplication sharedApplication]setStatusBarHidden:YES animated:NO]; 33. 更改AlertView背景 UIAlertView *theAlert = [[[UIAlertViewalloc] initWithTitle:@"Atention" message: @"I'm a Chinese!" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Okay",nil] autorelease]; [theAlert show]; UIImage *theImage = [UIImageimageNamed:@"loveChina.png"]; theImage = [theImage stretchableImageWithLeftCapWidth:0topCapHeight:0]; CGSize theSize = [theAlert frame].size; UIGraphicsBeginImageContext(theSize); [theImage
draw
In
Rect
:CG
Rect
Make(5, 5, theSize.width-10, theSize.height-20)];//这个地方的大小要自己调整,以适应alertview的背景颜色的大小。 theImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); theAlert.layer.contents = (id)[theImage CGImage]; 34. 键盘透明 textField.keyboardAppearance = UIKeyboardAppearanceAlert; 状态栏的网络活动风火轮是否旋转 [UIApplication sharedApplication].networkActivityIndicatorVisible,默认值是NO。 35截取屏幕图片 //创建一个基于位图的图形上下文并指定大小为CGSizeMake(200,400) UIGraphicsBeginImageContext(CGSizeMake(200,400)); //renderInContext 呈现接受者及其子范围到指定的上下文 [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; //返回一个基于当前图形上下文的图片 UIImage *aImage = UIGraphicsGetImageFromCurrentImageContext(); //移除栈顶的基于当前位图的图形上下文 UIGraphicsEndImageContext(); //以png格式返回指定图片的数据 imageData = UIImagePNGRepresentation(aImage); 36更改cell选中的背景
UIView
*myview = [[
UIView
alloc] init]; myview.frame = CG
Rect
Make(0, 0, 320, 47); myview.backgroundColor = [UIColorcolorWithPatternImage:[UIImage imageNamed:@"0006.png"]]; cell.selectedBackgroundView = myview; 37显示图像: CG
Rect
myImage
Rect
= CG
Rect
Make(0.0f, 0.0f, 320.0f, 109.0f); UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImage
Rect
]; [myImage setImage:[UIImage imageNamed:@"myImage.png"]]; myImage.opaque = YES; //opaque是否透明 [self.view addSubview:myImage]; 38.能让图片适应框的大小(没有确认) NSString*imagePath = [[NSBundle mainBundle] pathForResource:@"XcodeCrash"ofType:@"png"]; UIImage *image = [[UIImage alloc]initWithContentsOfFile:imagePath]; UIImage *newImage= [image transformWidth:80.f height:240.f]; UIImageView *imageView = [[UIImageView alloc]initWithImage:newImage]; [newImagerelease]; [image release]; [self.view addSubview:imageView]; 39.实现点击图片进行跳转的代码:生成一个带有背景图片的button,给button绑定想要的事件! UIButton *imgButton=[[UIButton alloc]initWithFrame:CG
Rect
Make(0, 0, 120, 120)]; [imgButton setBackgroundImage:(UIImage *)[self.imgArray objectAtIndex:indexPath.row] forState:UIControlStateNormal]; imgButton.tag=[indexPath row]; [imgButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
关于
UIView
draw
Rect
方法
在子类化
UIView
时,会自动调用
draw
Rect
方法,可以在子类中重载该函数,以实现自己的功能。 另外,当需要重绘时,可调用setNeedsDisplay 或者 setNeedsDisplayIn
Rect
方法,而不能直接调用
draw
Rect
方法。 This method is called when a view is first displayed or when an eve
iOS
29,028
社区成员
12,466
社区内容
发帖
与我相关
我的任务
iOS
主要讨论与iOS相关的软件和技术
复制链接
扫一扫
分享
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章