`
61party
  • 浏览: 1118501 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

iPhone开发:类似iChat的聊天泡泡示例

 
阅读更多

很多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;

}



分享到:
评论

相关推荐

    ichat 租用版(14年购买)野原鑫之助工作室

    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聊天室基于Java.zip 基于java的开发源码-iCHAT聊天...

    iCHAT聊天室基于Java

    “iCHAT聊天室基于Java”这一项目是一个使用Java编程语言开发的实时通讯平台,旨在提供一个互动性强、功能丰富的在线聊天环境。Java作为一门跨平台的面向对象的语言,因其稳定性和高效性而广泛应用于大型系统开发,...

    ichat聊天室客户端ichat2.5/ichat3.5

    ichat聊天室客户端是一款兼容ichat文字版、语音版、视频版于一体的客户单登陆软件,可以兼容于任何ichat聊天室版本,桌面登录快捷方便,可以多号开插件登陆,也可以挂号用。希望有合作机会。可以定制服务。

    iChat视频聊天系统

    本iChat版本乃iChat视频版2.5由野原鑫之助改良后的iChat3.0视频版+iChat视频版后台管理+iChat2.1语音租用版后台管理野原鑫之助改良。本人将本程序绑定在域名localhost上,也就是说只允许本机localhost运行,用户可将...

    iChat聊天软件的说明

    iChat是一款专为苹果Mac OS X操作系统设计的即时通讯软件,它提供了丰富的功能,使得用户可以轻松地进行文字聊天、音频通话、视频会议以及文件共享等。以下是对iChat的详细说明: 一、iChat的基本功能 1. 文字聊天...

    java源码:iCHAT聊天室基于Java.rar

    【标题】"java源码:iCHAT聊天室基于Java.rar" 涉及到的核心知识点主要围绕Java编程语言,特别是网络编程和多线程技术,用于实现一个在线聊天室应用。iCHAT聊天室是一个典型的Java项目,它展示了如何利用Java的技术...

    ichat聊天室客户端4.0

    【ichat聊天室客户端4.0】是一款专为用户提供便捷沟通体验的聊天室软件,它是博雅ichat聊天室系列的最新升级版本。这款客户端旨在为用户带来更全面、更流畅的聊天体验,将ichat的文字、语音和视频功能整合在了一起,...

    Ichat聊天工具 C++

    "Ichat聊天工具 C++"是一个基于C++编程语言开发的聊天软件项目,旨在模仿QQ和飞秋等流行的即时通讯应用。这个项目包含了服务器和客户端两部分,为用户提供基本的聊天功能,适合用作计算机科学与技术专业的毕业设计。...

    ichat1.89聊天室

    "ichat1.89聊天室"是一款基于网络的即时通讯软件,主要功能是提供多人在线聊天和互动的平台。这个压缩包包含了该聊天室软件的一些核心组件和相关辅助工具,便于用户安装和使用。 首先,`ichat.ini` 和 `rooms.ini` ...

    ichat视频聊天室程序

    【ichat视频聊天室程序】是一款专为用户提供实时视频交流平台的应用程序,它结合了音频和视频通信技术,使得用户可以进行面对面的在线互动。在本文中,我们将深入探讨ichat程序的核心功能、工作原理、关键技术以及其...

    iChat聊天室通用机器人 在 Pc-laugh8 上

    1. **iChat机器人开发**:文件可能包含有关如何编程和配置一个iChat聊天室机器人的指南,涉及到的编程语言可能是Python、JavaScript或其他支持iChat API的语言。 2. **API接口**:可能有文档详细说明了iChat聊天室...

    ichat聊天在线人数ASP

    标题“ichat聊天在线人数ASP”指的是使用ASP编程语言来实现的一个名为“ichat”的聊天室系统,该系统能够实时显示当前在线用户的数量。下面将详细探讨相关的知识点。 首先,ASP工作原理:ASP是微软开发的一种服务器...

    正版iChat完美版后台

    iChat是一款由Apple公司开发的即时通讯软件,主要用于Mac OS X操作系统中,它集成了音频、视频聊天以及文本消息功能,让用户可以方便地与其他人进行实时交流。"正版iChat完美版后台"指的是该软件的完整且无篡改版本...

    基于Java的实例源码-iCHAT聊天室基于Java.zip

    【标题解析】 ...通过这个iCHAT聊天室项目,开发者和学习者可以深入了解Java的网络编程、用户界面设计以及并发处理等多个核心概念,同时,也能实践软件开发的完整流程,从设计到测试,提升实际编程能力。

    基于Java的实例开发源码-iCHAT聊天室基于Java.zip

    在本资源中,我们关注的是一个名为"iCHAT聊天室"的基于Java的实例开发项目。这个项目提供了完整的源码,对于学习Java编程,特别是网络编程和多线程技术的开发者来说,是一个非常宝贵的参考资料。Java是一种广泛使用...

    Ichat综合设计报告Ichat实时聊天系统

    根据给定的信息,我们可以深入探讨“Ichat实时聊天系统”这一项目的相关知识点,包括其实现目的、涉及的关键技术、设计思路以及具体的实现细节等。 ### 一、设计目的 本项目旨在通过实现一个实时聊天系统——Ichat...

    ichat简单IE福吧聊天客户端

    【ichat简单IE福吧聊天客户端】是一款专为福吧聊天室设计的便捷式聊天工具,它省去了用户需要记住网址或通过浏览器访问的步骤。该客户端的优势在于其便携性,无需安装即可直接使用,这使得用户可以随时随地快速进入...

    ichat171聊天室

    ... [*] 改进了打开包厢需要刷新屏幕的功能,并增加了垂直分屏的功能。 ...[*] 增加了LOGIN页面显示次数,单个房间最大访问数量等系统变量,涉及LOGIN页面和INDEX页面 ...[*] 增加了MAIN首页的VISITS访问次数和系统...

Global site tag (gtag.js) - Google Analytics