很多iPhone聊天程序消息显示都喜欢做成iChat的泡泡样式,这样是不是很apple呢?
那么下面用一种简单的方法来实现它。
主要通过
UIlabel的sizeToFit方法自动计算文本区域大小
UIImage的- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;方法拉伸图片
可以根据文本内容自动适应算泡泡高度
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;的含义是
横向从leftCapWidth+1个像素开始,该像素被横向无限复制,作为中间部分,剩余部分又被链接到一起组成整张图
纵向从topCapHeight+1个像素开始,该像素被纵向无限复制,作为中间部分,剩余部分又被链接到一起组成整张图
所有拉伸后的图片不会变模糊。
效果如下,先上图

所要用到的资源
和
定义一个类ChatPopView,代码日下
#import <UIKit/UIKit.h>
typedef enum tagPopDirection
{
ePopDirectionLeft = 0,
ePopDirectionRight
}ePopDirection;
@interface ChatPopView : UIView {
UIImageView *popBackground;
UILabel *contentLabel;
ePopDirection direction;
}
@property (nonatomic,retain) UIImageView *popBackground;
@property (nonatomic,retain) UILabel *contentLabel;
@property (assign) ePopDirection direction;
-(id)initWithFrame:(CGRect)frame popDirection:(ePopDirection) d;
-(void)setText:(NSString *)str;
@end
#import "ChatPopView.h"
@implementation ChatPopView
@synthesize popBackground;
@synthesize contentLabel;
@synthesize direction;
-(id)initWithFrame:(CGRect)frame popDirection:(ePopDirection) d{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.direction = d;
UIImageView *back = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
self.popBackground = back;
[back release];
UIImage *theImage = nil;
if (ePopDirectionRight== self.direction) {
theImage = [UIImage imageNamed:@"SSMessageTableViewCellBackgroundGreen"];
}else {
theImage = [UIImage imageNamed:@"SSMessageTableViewCellBackgroundClear"];
}
popBackground.image = [theImage stretchableImageWithLeftCapWidth:21 topCapHeight:15];
[self addSubview:popBackground];
UILabel *content = [[UILabel alloc] initWithFrame:CGRectMake(15, 5, frame.size.width - 15, frame.size.height)];
self.contentLabel = content;
[content release];
contentLabel.numberOfLines = 0;
contentLabel.backgroundColor = [UIColor clearColor];
[self addSubview:contentLabel];
}
return self;
}
-(void)setText:(NSString *)str{
contentLabel.text = str;
[contentLabel sizeToFit];
[self setNeedsLayout];
}
-(void)layoutSubviews{
[super layoutSubviews];
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, contentLabel.frame.size.width+30, contentLabel.frame.size.height+15);
popBackground.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}
- (void)dealloc {
[popBackground release];
[contentLabel release];
[super dealloc];
}
我们可以这样使用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
ChatPopView *pop1 = [[ChatPopView alloc] initWithFrame:CGRectMake(20, 100, 200, 80) popDirection:ePopDirectionLeft];
[self.window addSubview:pop1];
[pop1 setText:@"Sent when the application is about to move from active to inactive state. "];
ChatPopView *pop2 = [[ChatPopView alloc] initWithFrame:CGRectMake(130, 220, 200, 40) popDirection:ePopDirectionRight];
[self.window addSubview:pop2];
[pop2 setText:@"This can occur for certain types of..."];
ChatPopView *pop3 = [[ChatPopView alloc] initWithFrame:CGRectMake(20, 300, 280, 300) popDirection:ePopDirectionLeft];
[self.window addSubview:pop3];
[pop3 setText:@""];
ChatPopView *pop4 = [[ChatPopView alloc] initWithFrame:CGRectMake(230, 400, 200, 40) popDirection:ePopDirectionRight];
[self.window addSubview:pop4];
[pop4 setText:@""];
[pop1 release];
return YES;
}
分享到:
相关推荐
3,新建一个数据库,建议将数据库文件放置于D:\ichat\data目录下,便于管理,设置好帐号密码,执行D:\ichat\SQL Tools\chat.sql,并写进配置文件D:\ichat\ichat\ichat.ini 4,复制一份D:\ichat\rooms\default.ini,命名为...
基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天...
“iCHAT聊天室基于Java”这一项目是一个使用Java编程语言开发的实时通讯平台,旨在提供一个互动性强、功能丰富的在线聊天环境。Java作为一门跨平台的面向对象的语言,因其稳定性和高效性而广泛应用于大型系统开发,...
ichat聊天室客户端是一款兼容ichat文字版、语音版、视频版于一体的客户单登陆软件,可以兼容于任何ichat聊天室版本,桌面登录快捷方便,可以多号开插件登陆,也可以挂号用。希望有合作机会。可以定制服务。
本iChat版本乃iChat视频版2.5由野原鑫之助改良后的iChat3.0视频版+iChat视频版后台管理+iChat2.1语音租用版后台管理野原鑫之助改良。本人将本程序绑定在域名localhost上,也就是说只允许本机localhost运行,用户可将...
iChat是一款专为苹果Mac OS X操作系统设计的即时通讯软件,它提供了丰富的功能,使得用户可以轻松地进行文字聊天、音频通话、视频会议以及文件共享等。以下是对iChat的详细说明: 一、iChat的基本功能 1. 文字聊天...
【标题】"java源码:iCHAT聊天室基于Java.rar" 涉及到的核心知识点主要围绕Java编程语言,特别是网络编程和多线程技术,用于实现一个在线聊天室应用。iCHAT聊天室是一个典型的Java项目,它展示了如何利用Java的技术...
【ichat聊天室客户端4.0】是一款专为用户提供便捷沟通体验的聊天室软件,它是博雅ichat聊天室系列的最新升级版本。这款客户端旨在为用户带来更全面、更流畅的聊天体验,将ichat的文字、语音和视频功能整合在了一起,...
"Ichat聊天工具 C++"是一个基于C++编程语言开发的聊天软件项目,旨在模仿QQ和飞秋等流行的即时通讯应用。这个项目包含了服务器和客户端两部分,为用户提供基本的聊天功能,适合用作计算机科学与技术专业的毕业设计。...
"ichat1.89聊天室"是一款基于网络的即时通讯软件,主要功能是提供多人在线聊天和互动的平台。这个压缩包包含了该聊天室软件的一些核心组件和相关辅助工具,便于用户安装和使用。 首先,`ichat.ini` 和 `rooms.ini` ...
【ichat视频聊天室程序】是一款专为用户提供实时视频交流平台的应用程序,它结合了音频和视频通信技术,使得用户可以进行面对面的在线互动。在本文中,我们将深入探讨ichat程序的核心功能、工作原理、关键技术以及其...
1. **iChat机器人开发**:文件可能包含有关如何编程和配置一个iChat聊天室机器人的指南,涉及到的编程语言可能是Python、JavaScript或其他支持iChat API的语言。 2. **API接口**:可能有文档详细说明了iChat聊天室...
标题“ichat聊天在线人数ASP”指的是使用ASP编程语言来实现的一个名为“ichat”的聊天室系统,该系统能够实时显示当前在线用户的数量。下面将详细探讨相关的知识点。 首先,ASP工作原理:ASP是微软开发的一种服务器...
iChat是一款由Apple公司开发的即时通讯软件,主要用于Mac OS X操作系统中,它集成了音频、视频聊天以及文本消息功能,让用户可以方便地与其他人进行实时交流。"正版iChat完美版后台"指的是该软件的完整且无篡改版本...
【标题解析】 ...通过这个iCHAT聊天室项目,开发者和学习者可以深入了解Java的网络编程、用户界面设计以及并发处理等多个核心概念,同时,也能实践软件开发的完整流程,从设计到测试,提升实际编程能力。
在本资源中,我们关注的是一个名为"iCHAT聊天室"的基于Java的实例开发项目。这个项目提供了完整的源码,对于学习Java编程,特别是网络编程和多线程技术的开发者来说,是一个非常宝贵的参考资料。Java是一种广泛使用...
根据给定的信息,我们可以深入探讨“Ichat实时聊天系统”这一项目的相关知识点,包括其实现目的、涉及的关键技术、设计思路以及具体的实现细节等。 ### 一、设计目的 本项目旨在通过实现一个实时聊天系统——Ichat...
【ichat简单IE福吧聊天客户端】是一款专为福吧聊天室设计的便捷式聊天工具,它省去了用户需要记住网址或通过浏览器访问的步骤。该客户端的优势在于其便携性,无需安装即可直接使用,这使得用户可以随时随地快速进入...
... [*] 改进了打开包厢需要刷新屏幕的功能,并增加了垂直分屏的功能。 ...[*] 增加了LOGIN页面显示次数,单个房间最大访问数量等系统变量,涉及LOGIN页面和INDEX页面 ...[*] 增加了MAIN首页的VISITS访问次数和系统...