`

IOS 气泡视图的方式

    博客分类:
  • IOS
阅读更多

在一些ios应用中经常会需要自定义视图,其中气泡视图就是其中之一,下面介绍两种方式:

 

方式一:

1:新建一UIView的子类UIBubbleView

2:在initwithframe中初始化

a):要绘制气泡的坐标targetpoint(x,y);

b):气泡的frame bubbleFrame;

c):调用方法setneedslayout;

3:调用drawCGRect方法

只要代码如下:

- (void)drawRect:(CGRect)rect{

	NSLog(@"bubble draw");
	CGContextRef c = UIGraphicsGetCurrentContext();
	CGContextSetRGBStrokeColor(c, 0.0, 0.0, 0.0, 0.0);
	CGContextSetLineWidth(c, 3.0);
	//确定画线的宽度,对象组合,颜色
	CGMutablePathRef bubblePath = CGPathCreateMutable();
	//绘制起点-箭头右边-气泡右上顶点-右下顶点-左下顶点-左上顶点-箭头左边-起点闭合
	CGPathMoveToPoint(bubblePath, NULL, targetPoint.x, targetPoint.y);
	CGPathAddLineToPoint(bubblePath, NULL, targetPoint.x+pointerSize-1, targetPoint.y-2);
	CGPathAddArcToPoint(bubblePath, NULL, bubbleFrame.origin.x, bubbleFrame.origin.y, 
						bubbleFrame.origin.x + bubbleFrame.size.width, bubbleFrame.origin.y, cornerRadius);
	CGPathAddArcToPoint(bubblePath, NULL, bubbleFrame.origin.x + bubbleFrame.size.width, bubbleFrame.origin.y, 
						bubbleFrame.origin.x+bubbleFrame.size.width, bubbleFrame.origin.y+bubbleFrame.size.height, cornerRadius);
	CGPathAddArcToPoint(bubblePath, NULL, bubbleFrame.origin.x+bubbleFrame.size.width, bubbleFrame.origin.y+bubbleFrame.size.height, 
						bubbleFrame.origin.x, bubbleFrame.origin.y+bubbleFrame.size.height, cornerRadius);
	CGPathAddArcToPoint(bubblePath, NULL, bubbleFrame.origin.x, bubbleFrame.origin.y+bubbleFrame.size.height, 
						bubbleFrame.origin.x, targetPoint.y+pointerSize , cornerRadius);
	CGPathAddLineToPoint(bubblePath, NULL, targetPoint.x + pointerSize, targetPoint.y+pointerSize);
	CGPathCloseSubpath(bubblePath);
	
	//绘制阴影
	CGContextAddPath(c, bubblePath);
	CGContextSaveGState(c);
	CGContextSetShadow(c, CGSizeMake(0, 3), 5);
	CGContextSetRGBFillColor(c, 255.0, 255.0, 255.0, 0.0);
	CGContextFillPath(c);
	CGContextRestoreGState(c);
	
	//设置边线颜色
	CGContextAddPath(c, bubblePath);
	CGContextClip(c);
	
	int numberBorderComponents = CGColorGetNumberOfComponents([borderColor CGColor]);
	const CGFloat *borderComponents = CGColorGetComponents(borderColor.CGColor);
	CGFloat r,g,b,a;
	if (numberBorderComponents == 2) {
		r = borderComponents[0];
		g = borderComponents[0];
		b = borderComponents[0];
		a = borderComponents[1];
	}else {
		r = borderComponents[0];
		g = borderComponents[1];
		b = borderComponents[2];
		a = borderComponents[3];
	}
	CGContextSetRGBStrokeColor(c, r, g, b, a);
	CGContextAddPath(c, bubblePath);
	CGContextDrawPath(c, kCGPathStroke);
	CGPathRelease(bubblePath);

	
}

 

4:在需要的时候调用UIBubbleView就可使用了。

 

方式二:使用UIImage的可局部拉伸的功能,对一个气泡图片进行局部拉伸,拉伸后的图片作为uiview的背景view

1:找一张气泡图片如下图;

2:new UIView  ,添加背景图view

只要代码如下:

- (UIView *)bubbleView:(NSString *)text from:(BOOL)fromSelf {

	// build single chat bubble cell with given text
	UIView *returnView = [[UIView alloc] initWithFrame:CGRectZero];
	returnView.backgroundColor = [UIColor clearColor];
	//根据气泡箭头的方向选择不同气泡图片
	UIImage *bubble = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fromSelf?@"bubbleSelf":@"bubble" ofType:@"png"]];
	//对气泡图片进行拉伸
	UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:0.0 topCapHeight:0.0]];

	UIFont *font = [UIFont systemFontOfSize:12];
	//获取文字所占的大小
	CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(150.0f, 1000.0f) lineBreakMode:UILineBreakModeCharacterWrap];

	UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(21.0f, 14.0f, size.width+10, size.height+10)];
	bubbleText.backgroundColor = [UIColor clearColor];
	bubbleText.font = font;
	bubbleText.numberOfLines = 0;
	bubbleText.lineBreakMode = UILineBreakModeCharacterWrap;
	bubbleText.text = text;
	
	bubbleImageView.frame = CGRectMake(0.0f, 0.0f, 200.0f, size.height+40.0f);
	if(fromSelf)
		returnView.frame = CGRectMake(120.0f, 10.0f, 200.0f, size.height+50.0f);
	else
		returnView.frame = CGRectMake(0.0f, 10.0f, 200.0f, size.height+50.0f);
	
	[returnView addSubview:bubbleImageView];
	[bubbleImageView release];
	[returnView addSubview:bubbleText];
	[bubbleText release];

	return [returnView autorelease];
}
 

3:在需要的地方调用就可以了

 

 

两种方式各有自己的方便之处,根据自己的需要选择使用

  • 大小: 1.4 KB
  • 大小: 1.5 KB
分享到:
评论

相关推荐

    封装的iOS气泡提示,带动画

    【标题】"封装的iOS气泡提示,带动画"揭示了一个在iOS开发中常见的用户界面元素,即气泡提示。这种提示通常用于引导用户、显示重要通知或指示某个功能的操作方式。开发者通过封装这种气泡提示,可以方便地在自己的...

    iOS气泡文字

    在iOS开发中,"气泡文字"通常指的是...在实际项目中,开发者通常会结合以上技术点,根据需求创建一个可重用的气泡视图组件。通过良好的代码封装和模块化设计,可以确保气泡文字效果在不同场景下的可扩展性和可维护性。

    swift-iOS气泡动画

    本篇将深入探讨如何利用Swift实现“iOS气泡动画”。 气泡动画通常用于聊天应用、通知提示或者界面过渡效果,它模拟了气泡上升、浮动或者破裂的过程,为用户带来生动的交互体验。在Swift中,我们可以借助Core ...

    ios-ios 聊天界面 气泡聊天.zip

    - **UI设计**:使用UIKit框架中的`UIView`和`UILabel`类可以创建自定义气泡视图。气泡的形状可以通过设置边框和圆角来实现,而消息内容则通过`UILabel`显示。 - **Auto Layout**:为了适配不同屏幕尺寸和内容长度...

    swift-iOS上的气泡弹窗。简单易用三行代码就可以集成

    标题和描述中提到的"swift-iOS上的气泡弹窗",是一种轻量级的UI组件,它可以在用户界面上以气泡形状显示信息或操作选项。 在Swift中实现这种气泡弹窗,通常会借助自定义视图或者第三方库。这个“SMPopView-master”...

    ios-视图动画.zip

    为了实现聊天界面,开发者可能设计了自定义的UITableViewCell,包含了输入框、发送按钮以及消息气泡视图。聊天消息的显示效果,如出入动效、气泡形状和方向,都可以通过自定义cell的布局和动画来实现。 课程表的...

    IOS应用源码之微信的聊天气泡效果 .rar

    这就需要用到Auto Layout的约束,确保气泡视图能够根据内容自动扩展或收缩。同时,气泡的中心位置也需要与单元格的中心对齐,以保持视觉上的平衡。 此外,还需要处理文字的排版。在iOS中,可以使用NSTextView或者...

    iOS气泡聊天

    本文将深入探讨iOS气泡聊天的设计原理、实现方式以及相关的开发技巧。 1. **气泡设计** - **视觉元素**:气泡设计通常包括发送方和接收方两种不同的样式,以区分消息来源。发送方的气泡通常位于屏幕右侧,呈白色或...

    swift-iOS聊天气泡

    在iOS应用开发中,"swift-iOS聊天气泡"是一个常见的功能,特别是在社交、通讯类应用中,用于展示用户之间的对话。聊天气泡通常由一个包含文字或表情的图形元素表示,具有不同的颜色和形状来区分发送者和接收者。...

    ios仿腾讯视频ipad版翻页效果带气泡提示

    综上所述,实现“ios腾讯视频iPad版翻页效果带气泡提示”涉及到了自定义转场动画、自定义视图绘制、手势识别、布局管理、动画优化等多个方面,这需要开发者对iOS SDK有深入的理解和熟练的编程技巧。通过不断地实践和...

    iOS在一个图标上加上气泡,显示数字demo

    我们可以在`UILabel`中设置数字或者想要显示的文本,然后将其添加到气泡视图上,通过布局约束(Auto Layout)确定其位置。 为了使气泡能够动态显示在图标上,我们需要在适当的位置添加这个自定义视图。这通常会在`...

    ios-图片气泡.zip

    总之,"ios-图片气泡.zip"资源很可能包含了实现图片气泡效果的相关代码,涉及到了iOS开发中的图形绘制、自定义视图、遮罩技术以及可能的布局管理。这些知识点对于提升iOS应用的界面美观度和用户体验具有重要意义。...

    IOS-气泡提示源码

    在iOS应用开发中,用户界面的反馈至关重要,MBProgressHUD就是这样一款强大的开源库,它提供了一种优雅的方式来显示进度指示器或者简单的提示信息,通常被称为“气泡提示”。这个库以其灵活性和易用性在iOS开发者...

    ios-气泡提示框.zip

    一个灵活,简易,扩展性强的气泡提示框。可通过属性设置颜色、边框色、圆角、三角大小、三角位置、按比例设置三角位置、三角方向、气泡中的文字。还暴露一个容器可让用户自定义气泡中的内容。如果你懒得设置这些属性,...

    iOS 实现聊天气泡界面

    使用`AutoLayout`或者`NSLayoutConstraint`来设置气泡视图与屏幕边缘、其他气泡之间的约束。对于自动调整气泡大小,可以监听`UILabel`的`sizeThatFits`方法,然后更新气泡的frame。 4. **区分发送方和接收方**: ...

    iOS实现浮动泡泡功能

    在iOS开发中,实现“浮动泡泡”功能通常涉及到动画效果、自定义视图以及物理碰撞检测等技术。这个功能在很多应用中都有所应用,比如天气应用中的气泡动画、社交应用的消息提示等。以下是对这个功能的详细解析: ...

    ios-气泡按钮.zip

    综上所述,"ios-气泡按钮.zip"中的"QiPao按钮"可能是一个实现了上述功能的自定义视图,通过学习和理解这个实现,开发者可以更好地掌握iOS中的自定义视图、动画、手势识别等技术,提升应用的用户体验。

    Bubble-Drag-master消息气泡拖拽消失动画

    4. **布局管理**:为了在屏幕上的合适位置显示气泡,可能使用了RelativeLayout、LinearLayout或ConstraintLayout(Android)或AutoLayout(iOS),确保气泡在屏幕上的正确对齐和定位。 5. **颜色选择器**:为了允许...

    抽屉聊天气泡

    在iOS开发中,实现聊天气泡通常会用到`UIView`的自定义绘制,可以使用` UIBezierPath `创建气泡形状,`CATextLayer`或`UILabel`添加文字,以及自定义布局逻辑。"RightViewController.m"可能涉及到聊天气泡的布局和...

    实现自定义弹出气泡视图的效果

    本文将深入探讨如何实现自定义弹出气泡视图的效果,这通常用于显示提示信息或操作选项,其设计灵活性高,能吸引用户的注意力。我们通过分析标题和描述,可以看出这个案例主要涉及以下几个知识点: 1. 自定义视图...

Global site tag (gtag.js) - Google Analytics