//

// ChatViewCell.swift

//

// Created by 柯木超 on 15/7/16.

// copyright (c) 2015 CCC. All rights reserved.

//


import UIKit

enum JLMessageType{

case me

case other

}


class ChatViewCell: UITableViewCell {

var MAXFLOAT:CGFloat = 0x1.fffffep+127 //文本最大高度

var _icon=UIImageView();

var _times=UILabel();

var _content:UIButton=UIButton.buttonWithType(UIButtonType.System) as! UIButton;

var bgImage = UIImageView();

var height:CGFloat=0;

var iconWidth:CGFloat=30;

var cellWidth:CGFloat=10;

var timeWidth:CGFloat=20;

var contentWidthWithBgImage:CGFloat=10;//文本与背景的边界距离

var JLTextFont:UIFont = UIFont(name: "HelveticaNeue",size: 15)!;


/**

* 是否隐藏时间(如果连续多条信息的时间相同,只能有一条信息显示时间)

*/

var hideTime:Bool?;

var chatMessageModel:ChatMessageModel?{

didSet{

self.addSubview(bgImage);

self.addSubview(_icon);

self.addSubview(_times);

self.addSubview(_content);

self.backgroundColor = UIColor.clearColor();

//填充内容

_icon.image=UIImage(named: "xiaohua");

var nf = NSDateFormatter();

nf.dateFromString("yyyy-MM-dd HH:mm")

_times.text = nf.stringFromDate(chatMessageModel!.time!);

_times.textAlignment = NSTextAlignment.Center;

_times.textColor = UIColor.blackColor()

// _content.backgroundColor = UIColor.yellowColor();

_content.setTitle(chatMessageModel?.content,forState: UIControlState.normal);

_content.setTitleColor(UIColor.blackColor(),forState: UIControlState.normal)

_content.titleLabel!.numberOfLines = 0;

// _content.titleLabel!.textColor = UIColor.blackColor()

_content.titleLabel!.font = UIFont(name: "HelveticaNeue",size: 14);

// 设置文本距离UIButton的边距

_content.contentEdgeInsets = UIEdgeInsetsMake(1.5*contentWidthWithBgImage,2*contentWidthWithBgImage,1.5*contentWidthWithBgImage,2*contentWidthWithBgImage)

//填充背景

if(chatMessageModel?.sourceId==7){ //7是本人,暂时先写成硬编码

bgImage.image = UIImage(named: "meme");

}else{

bgImage.image = UIImage(named: "other");

}

//算内容所占的空间

if(chatMessageModel?.sourceId==7){

//显示时间

if(chatMessageModel?.hideTime==1){

_times.frame = CGRect(x: (WIDTH-150)/2,y: 0,width: 150,height: timeWidth)

}

_icon.frame = CGRect(x: WIDTH-30*TMP-10*TMP,y: CGRectGetMaxY(_times.frame)+3*TMP,width: iconWidth,height: iconWidth)

//文本信息的最大宽度

var MAXWIDTH:CGFloat = WIDTH-30*TMP*2-50*TMP;

// 文本信息的最大尺寸

var textMaxSize = CGSizeMake(MAXWIDTH,MAXFLOAT);

var text:Nsstring = Nsstring(string: chatMessageModel!.content!);

var dict:NSDictionary = NSDictionary(object:JLTextFont,forKey: NSFontAttributeName)

//文本信息真实尺寸

var textRealSize = text.boundingRectWithSize(textMaxSize,options: NsstringDrawingOptions.UsesLineFragmentOrigin,attributes: dict as [NSObject : AnyObject],context: nil);

_content.frame = CGRect(x: WIDTH-textRealSize.width-iconWidth-55*TMP,y: CGRectGetMaxY(_icon.frame)-iconWidth,width: textRealSize.width+4*contentWidthWithBgImage,height: textRealSize.height+3*contentWidthWithBgImage);


_content.setBackgroundImage(UIImage.resizableImage("meme"),forState: UIControlState.normal)

println("me icon===\(_icon)")

println("me _times=====\(_times)")

println("me content====\(_content)")

println("me bgimage==\(bgImage)");

height = CGRectGetMaxY(_content.frame);

}

//别人发的信息

else{

//显示时间

if(chatMessageModel?.hideTime==1){

_times.frame = CGRect(x: (WIDTH-150)/2,height: timeWidth)

}

_icon.frame = CGRect(x: 10*TMP,y: CGRectGetMaxY(_times.frame)+3*HeightTMP,height: iconWidth)

//文本信息的最大宽度

var MAXWIDTH:CGFloat = WIDTH-40*TMP*2-20*TMP*2;

// 文本信息的最大尺寸

var textMaxSize = CGSizeMake(MAXWIDTH,context: nil);

_content.frame = CGRect(x: 15*TMP+iconWidth,height: textRealSize.height+2*contentWidthWithBgImage);

_content.setBackgroundImage(UIImage.resizableImage("other"),forState: UIControlState.normal)

// bgImage.frame = CGRect(x: 10*TMP+iconWidth,y: _content.frame.origin.y-10*TMP,width: _content.frame.size.width+30*TMP,height: _content.frame.size.height+20*TMP);

println("you icon===\(_icon)")

println("you _times=====\(_times)")

println("you content====\(_content)")

println("you bgimage==\(bgImage)");

height = CGRectGetMaxY(_content.frame);

}

}

}


override func awakeFromNib() {

super.awakeFromNib()

}


override func setSelected(selected: Bool,animated: Bool) {

super.setSelected(selected,animated: animated)

}

}


这里介绍的不是特别清楚,提供代码下载,代码很简单

swift QQ聊天界面 cell 的计算的更多相关文章

  1. AmazeUI 折叠面板的实现代码

    这篇文章主要介绍了AmazeUI 折叠面板的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 有关HTML5页面在iPhoneX适配问题

    这篇文章主要介绍了有关HTML5页面在iPhoneX适配问题,需要的朋友可以参考下

  3. Html5百叶窗效果的示例代码

    本篇文章主要介绍了Html5百叶窗效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. html5中使用hotcss.js实现手机端自适配的方法

    这篇文章主要介绍了html5中使用hotcss.js实现手机端自适配的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. IOS 10.2简单警报和徽章上的UserNotifications问题

    徽章问题我也试过在我的应用程序图标上实现了一个很好的标记,直到我试图删除它.这是执行它的功能:现在它没有增加徽章编号,因为它的名称应该建议,但它只是将徽章编号设置为1.文档说如果你将content.badge设置为0,它会删除它,但这不起作用.我尝试使用其他数字,当我手动将其更改为“2”,“3”等时……

  6. swift QQ聊天界面 cell 的计算

    ;/***是否隐藏时间*/varhideTime:Bool?.font=UIFont;//设置文本距离UIButton的边距_content.contentEdgeInsets=UIEdgeInsetsMake//填充背景if(chatMessageModel?.sourceId==7){//7是本人,暂时先写成硬编码bgImage.image=UIImage;}else{bgImage.image=UIImage;}//算内容所占的空间if(chatMessageModel?.hideTime==1){

  7. Swift学习笔记2网络数据交换格式XML,JSON解析 [iOS实战 入门与提高卷]

    示例文档Notes.xml创建XMLParser类调用与运行结果用TBXML来解析XML文档TBXML是第三方框架,使用起来比NSXML更简单。

  8. swift – 用户通知3天后重复每天/小时 – iOS 10

    UIlocalnotification已被折旧,因此我想将我的代码更新为UserNotification框架:在等待初始通知后,如何使用UserNotification框架设置类似的每日或每小时重复?看起来这似乎不受支持,但为了制定解决方法,您可以使用:与didReceive(_:withContentHandler:)结合使用,您可以使用:我知道这不是最佳的,但它应该不使用已弃用的类/方法.您使

  9. swift – iOS / FCM – 如何使用Payload中的图像名称将XCAsset文件夹中的图像显示为通知附件?

    实际上,来自有效载荷的键/值“attch”:“7a”是天气图像的代码,作为附件显示在通知中.我已将所有图像保存在我的xcassets文件夹中我需要:>获取通知中收到的图像名称>在xcassets文件夹中获取关联的图像>将图像的PNG表示复制到FileManager(磁盘)>将其设置为通知的附件编辑:已解决!

  10. 重复本周特定日期的本地通知(Swift 3 IOS 10)

    我正在尝试为一周中的特定日期安排本地通知,然后每周重复一次.这是用于设置通知的屏幕的外观:用户可以选择通知时间和重复日期.我调度单个非重复通知的方法如下所示:日期组件从UIDatePicker小部件中提取并存储在提醒类中:我有一个数组selectedDays[Int]来保存通知应该触发的星期几的信息.如何在一周中的特定日期安排通知以及如何每周重复一次?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部