在一些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开发中,"气泡文字"通常指的是...在实际项目中,开发者通常会结合以上技术点,根据需求创建一个可重用的气泡视图组件。通过良好的代码封装和模块化设计,可以确保气泡文字效果在不同场景下的可扩展性和可维护性。
本篇将深入探讨如何利用Swift实现“iOS气泡动画”。 气泡动画通常用于聊天应用、通知提示或者界面过渡效果,它模拟了气泡上升、浮动或者破裂的过程,为用户带来生动的交互体验。在Swift中,我们可以借助Core ...
- **UI设计**:使用UIKit框架中的`UIView`和`UILabel`类可以创建自定义气泡视图。气泡的形状可以通过设置边框和圆角来实现,而消息内容则通过`UILabel`显示。 - **Auto Layout**:为了适配不同屏幕尺寸和内容长度...
标题和描述中提到的"swift-iOS上的气泡弹窗",是一种轻量级的UI组件,它可以在用户界面上以气泡形状显示信息或操作选项。 在Swift中实现这种气泡弹窗,通常会借助自定义视图或者第三方库。这个“SMPopView-master”...
为了实现聊天界面,开发者可能设计了自定义的UITableViewCell,包含了输入框、发送按钮以及消息气泡视图。聊天消息的显示效果,如出入动效、气泡形状和方向,都可以通过自定义cell的布局和动画来实现。 课程表的...
这就需要用到Auto Layout的约束,确保气泡视图能够根据内容自动扩展或收缩。同时,气泡的中心位置也需要与单元格的中心对齐,以保持视觉上的平衡。 此外,还需要处理文字的排版。在iOS中,可以使用NSTextView或者...
本文将深入探讨iOS气泡聊天的设计原理、实现方式以及相关的开发技巧。 1. **气泡设计** - **视觉元素**:气泡设计通常包括发送方和接收方两种不同的样式,以区分消息来源。发送方的气泡通常位于屏幕右侧,呈白色或...
在iOS应用开发中,"swift-iOS聊天气泡"是一个常见的功能,特别是在社交、通讯类应用中,用于展示用户之间的对话。聊天气泡通常由一个包含文字或表情的图形元素表示,具有不同的颜色和形状来区分发送者和接收者。...
综上所述,实现“ios腾讯视频iPad版翻页效果带气泡提示”涉及到了自定义转场动画、自定义视图绘制、手势识别、布局管理、动画优化等多个方面,这需要开发者对iOS SDK有深入的理解和熟练的编程技巧。通过不断地实践和...
我们可以在`UILabel`中设置数字或者想要显示的文本,然后将其添加到气泡视图上,通过布局约束(Auto Layout)确定其位置。 为了使气泡能够动态显示在图标上,我们需要在适当的位置添加这个自定义视图。这通常会在`...
总之,"ios-图片气泡.zip"资源很可能包含了实现图片气泡效果的相关代码,涉及到了iOS开发中的图形绘制、自定义视图、遮罩技术以及可能的布局管理。这些知识点对于提升iOS应用的界面美观度和用户体验具有重要意义。...
在iOS应用开发中,用户界面的反馈至关重要,MBProgressHUD就是这样一款强大的开源库,它提供了一种优雅的方式来显示进度指示器或者简单的提示信息,通常被称为“气泡提示”。这个库以其灵活性和易用性在iOS开发者...
一个灵活,简易,扩展性强的气泡提示框。可通过属性设置颜色、边框色、圆角、三角大小、三角位置、按比例设置三角位置、三角方向、气泡中的文字。还暴露一个容器可让用户自定义气泡中的内容。如果你懒得设置这些属性,...
使用`AutoLayout`或者`NSLayoutConstraint`来设置气泡视图与屏幕边缘、其他气泡之间的约束。对于自动调整气泡大小,可以监听`UILabel`的`sizeThatFits`方法,然后更新气泡的frame。 4. **区分发送方和接收方**: ...
在iOS开发中,实现“浮动泡泡”功能通常涉及到动画效果、自定义视图以及物理碰撞检测等技术。这个功能在很多应用中都有所应用,比如天气应用中的气泡动画、社交应用的消息提示等。以下是对这个功能的详细解析: ...
综上所述,"ios-气泡按钮.zip"中的"QiPao按钮"可能是一个实现了上述功能的自定义视图,通过学习和理解这个实现,开发者可以更好地掌握iOS中的自定义视图、动画、手势识别等技术,提升应用的用户体验。
4. **布局管理**:为了在屏幕上的合适位置显示气泡,可能使用了RelativeLayout、LinearLayout或ConstraintLayout(Android)或AutoLayout(iOS),确保气泡在屏幕上的正确对齐和定位。 5. **颜色选择器**:为了允许...
在iOS开发中,实现聊天气泡通常会用到`UIView`的自定义绘制,可以使用` UIBezierPath `创建气泡形状,`CATextLayer`或`UILabel`添加文字,以及自定义布局逻辑。"RightViewController.m"可能涉及到聊天气泡的布局和...
本文将深入探讨如何实现自定义弹出气泡视图的效果,这通常用于显示提示信息或操作选项,其设计灵活性高,能吸引用户的注意力。我们通过分析标题和描述,可以看出这个案例主要涉及以下几个知识点: 1. 自定义视图...