自制微信的ui

参考http://ios.9tech.cn/news/2013/1111/38520.html
修改

配置绑定
[img]http://dl2.iteye.com/upload/attachment/0102/1755/5d41ad8b-4761-331f-aa59-f5b142a17795.png[/img]


#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
IBOutlet UITableView *tableViewList;
IBOutlet UITextField *messageTxt;
}
@property (nonatomic, strong) NSMutableArray *resultArray;
@end



//
// ViewController.m
// BubbleDemo
//
// Created by xiao7 on 14/10/19.
// Copyright (c) 2014年 killinux. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
- (IBAction)sendBubbleMessage:(id)sender {
NSString *thistext = messageTxt.text;
NSLog(@"sendBubbleMessage:%@",thistext);
messageTxt.text=nil;
NSDictionary *dict8 = [NSDictionary dictionaryWithObjectsAndKeys:@"weixin",@"name",thistext,@"content", nil];
[_resultArray addObject:dict8];
[tableViewList reloadData];
}

- (void)viewDidLoad {
[super viewDidLoad];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"weixin",@"name",@"这是一个测试",@"content", nil];
NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"haoning",@"name",@"hello",@"content", nil];

NSDictionary *dict7 = [NSDictionary dictionaryWithObjectsAndKeys:@"weixin",@"name",@",长数据测试。",@"content", nil];

_resultArray = [NSMutableArray arrayWithObjects:dict,dict1, nil];
[_resultArray addObject:dict7];

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//泡泡文本
- (UIView *)bubbleView:(NSString *)text from:(BOOL)fromSelf withPosition:(int)position{

//计算大小
UIFont *font = [UIFont systemFontOfSize:14];
CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(180.0f, 20000.0f) lineBreakMode:NSLineBreakByWordWrapping];

// 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?@"SenderAppNodeBkg_HL":@"ReceiverTextNodeBkg" ofType:@"png"]];

UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:floorf(bubble.size.width/2) topCapHeight:floorf(bubble.size.height/2)]];
NSLog(@"%f,%f",size.width,size.height);


//添加文本信息
UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(fromSelf?15.0f:22.0f, 20.0f, size.width+10, size.height+10)];
bubbleText.backgroundColor = [UIColor clearColor];
bubbleText.font = font;
bubbleText.numberOfLines = 0;
bubbleText.lineBreakMode = NSLineBreakByWordWrapping;
bubbleText.text = text;

bubbleImageView.frame = CGRectMake(0.0f, 14.0f, bubbleText.frame.size.width+30.0f, bubbleText.frame.size.height+20.0f);

if(fromSelf)
returnView.frame = CGRectMake(320-position-(bubbleText.frame.size.width+30.0f), 0.0f, bubbleText.frame.size.width+30.0f, bubbleText.frame.size.height+30.0f);
else
returnView.frame = CGRectMake(position, 0.0f, bubbleText.frame.size.width+30.0f, bubbleText.frame.size.height+30.0f);

[returnView addSubview:bubbleImageView];
[returnView addSubview:bubbleText];

return returnView;
}

//泡泡语音
- (UIView *)yuyinView:(NSInteger)logntime from:(BOOL)fromSelf withIndexRow:(NSInteger)indexRow withPosition:(int)position{

//根据语音长度
int yuyinwidth = 66+fromSelf;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.tag = indexRow;
if(fromSelf)
button.frame =CGRectMake(320-position-yuyinwidth, 10, yuyinwidth, 54);
else
button.frame =CGRectMake(position, 10, yuyinwidth, 54);

//image偏移量
UIEdgeInsets imageInsert;
imageInsert.top = -10;
imageInsert.left = fromSelf?button.frame.size.width/3:-button.frame.size.width/3;
button.imageEdgeInsets = imageInsert;

[button setImage:[UIImage imageNamed:fromSelf?@"SenderVoiceNodePlaying":@"ReceiverVoiceNodePlaying"] forState:UIControlStateNormal];
UIImage *backgroundImage = [UIImage imageNamed:fromSelf?@"SenderVoiceNodeDownloading":@"ReceiverVoiceNodeDownloading"];
backgroundImage = [backgroundImage stretchableImageWithLeftCapWidth:20 topCapHeight:0];
[button setBackgroundImage:backgroundImage forState:UIControlStateNormal];

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(fromSelf?-30:button.frame.size.width, 0, 30, button.frame.size.height)];
label.text = [NSString stringWithFormat:@"%d''",logntime];
label.textColor = [UIColor grayColor];
label.font = [UIFont systemFontOfSize:13];
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = [UIColor clearColor];
[button addSubview:label];

return button;
}

#pragma UITableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _resultArray.count;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *dict = [_resultArray objectAtIndex:indexPath.row];
UIFont *font = [UIFont systemFontOfSize:14];
CGSize size = [[dict objectForKey:@"content"] sizeWithFont:font constrainedToSize:CGSizeMake(180.0f, 20000.0f) lineBreakMode:NSLineBreakByWordWrapping];

return size.height+44;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}else{
for (UIView *cellView in cell.subviews){
[cellView removeFromSuperview];
}
}
NSDictionary *dict = [_resultArray objectAtIndex:indexPath.row];

//创建头像
UIImageView *photo ;
if ([[dict objectForKey:@"name"]isEqualToString:@"haoning"]) {
photo = [[UIImageView alloc]initWithFrame:CGRectMake(320-60, 10, 50, 50)];
[cell addSubview:photo];
photo.image = [UIImage imageNamed:@"photo1"];

if ([[dict objectForKey:@"content"] isEqualToString:@"0"]) {
[cell addSubview:[self yuyinView:1 from:YES withIndexRow:indexPath.row withPosition:65]];

}else{
[cell addSubview:[self bubbleView:[dict objectForKey:@"content"] from:YES withPosition:65]];
}

}else{
photo = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 50, 50)];
[cell addSubview:photo];
photo.image = [UIImage imageNamed:@"photo"];

if ([[dict objectForKey:@"content"] isEqualToString:@"0"]) {
[cell addSubview:[self yuyinView:1 from:NO withIndexRow:indexPath.row withPosition:65]];
}else{
[cell addSubview:[self bubbleView:[dict objectForKey:@"content"] from:NO withPosition:65]];
}
}

return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

}

@end

微信 4.1.5.16 UI 树“隐身”之谜:揭秘 UIAutomation 条件暴露与 RPA 破解之道 本文深入解析了微信4.1.5.16版本中UI树“隐身”现象的原因及解决方案,揭示了微信团队对UIAutomation接口的调整策略。通过伪装屏幕阅读器、修改注册表或自制UIA客户端等方法,开发者可以破解微信的UI树限制,实现RPA自动化测试。文章还提供了实战代码示例和避坑指南,助力开发者应对微信自动化开发中的挑战。 阅读详情

相关推荐

【C# WPF WeChat UI 简单布局】

【C# WPF WeChat UI 简单布局】

qq_54141095的博客 1312

微信自定义菜单UI-发布微信自定义菜单

很久以前写的微信自定义菜单由于当时没有保存源码,现在再写服务器后台发布页面又要写一遍(在网上搜了一遍没有找到这方面UI和交互的,也没有尝试去扒微信公众平台的),花了些时间又写了一个,除了没有更换菜单位置功能外,其他的交互流程都有了,不想造轮子的可以直接拿去用,还热乎的,刚在程序里提出来。 1.前提:后台使用的是H-ui框架,http://www.h-ui.net/index.shtml ,H-u...

梦里蓝天 3101

基于copaw-wechat的微信UI自动化:原理、实战与避坑指南

UI自动化是一种通过程序模拟用户操作图形界面(GUI)的技术,其核心原理是借助操作系统API或图像识别来驱动鼠标、键盘,完成点击、输入等交互。这项技术的价值在于能够以贴近真实用户行为的方式,自动化处理各类桌面应用中的重复性任务,有效提升工作效率并降低人为错误。在Python生态中,诸如pyautogui、pywinauto等库为UI自动化提供了基础能力。其典型应用场景涵盖软件测试、数据录入、办公流程自动化以及特定应用的机器人开发。本文聚焦于微信PC客户端的自动化需求,深入探讨了基于copaw-wechat框

weixin_30781433的博客 390

微信小程序开发实战(三)自定义UI样式---增加减少按钮

wxml <view class="wrap"> <view class="person"> <view class="personNum"> <view class="text">成人</view> <view class="outer"> <view class="minus" bindtap="minusAdultNum">—</view> .

有勇气的牛排博客 1012

Python爬虫之模拟登录微信wechat

不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的新闻或是公众号、还有个人信息或是隐私都被绑定在了一起。既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息,甚至可以根据需要来对它们进行有效的查看和管理。是的,没错,这完全可以。本篇博主将会给大家分享一下如何模拟登录网页版的微信,并展示模拟登录后获取的好友列表信息。微信模拟登录的过程比较复杂,当然不管怎么...

HowardWood的博客 1万+

微信小程序UI库_开发快速且一致的用户界面

微信小程序作为一种新型的轻量级应用形式,自推出以来便受到广泛的关注和迅猛的发展。开发者们通过微信官方提供的开发工具和API,能够快速构建出具备丰富功能的应用。本章将简要介绍微信小程序的基本概念、技术框架以及它的开发流程。微信小程序是一种不需要下载安装即可使用的应用,它实现了“触手可及”的服务理念,用户扫一扫或者搜一下即可打开应用。它具备出色的性能,丰富的功能,并且可以在微信内进行分享,极大地满足了用户对于便捷性与即时性的需求。UI库,全称为用户界面库,是一套预先设计好并可以复用的界面组件集合。

weixin_33375360的博客 1347

微信dat转换图片工具【免费下载】

基于Python和PyQt5开发的微信dat文件转换工具,该工具可将微信聊天记录中的加密.dat图片文件转换为常规图片格式(JPG/PNG/GIF)。

V.V.R.Y 1665

微信小程序报错:this.setData is not a function的解决办法

微信小程序 报错:this.setData is not a function 在page中定义的代码如下,代码会报错:this.setData is not a function pasteEncryptedText:function(){ let decryptedPass = this.data.decryptedPassword; if (decryptedPass == '' ){ wx.showToast({ title: '请先输入解密密码', mask: true, success: function (res) { s

使用React Native构建微信应用:rn-wechat项目详解

使用React Native构建微信应用:rn-wechat项目详解 在移动开发领域,React Native以其跨平台、高效开发的优势吸引了大量开发者。今天,我们要介绍的是一个基于React Native实现的微信小程序样例项目——,由开发者yubo725精心打造,它可以帮助你快速理解和学习如何在React Native中构建类似微信的应用。 项目概述 rn-wechat是一个全面模仿微信UI和...

gitblog_00015的博客 1767

Windows系统离线搭建PyTorch深度学习环境全攻略(CUDA+cudnn实战)

本文提供了一份在Windows系统下离线搭建PyTorch深度学习环境的完整实战指南。文章详细讲解了如何在没有网络连接的情况下,正确安装和配置CUDA、cudnn以及PyTorch,并构建独立的Python虚拟环境。重点强调了版本依赖关系的重要性,并提供了从驱动准备到环境验证的每一步操作,旨在帮助用户高效、稳定地部署可复用的GPU深度学习开发环境。

table的专栏 579

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

【转】react-native-wechat--微信登录

1.前言  在今天无论是游戏开发还是app开发,微信作为第三方登录必不可少,今天我们就用react-native-wechat实现微信登录,分享和支付同样的道理就不过多的介绍了。 2.属性 1)registerApp(appid):   appid:String类型,从微信开放平台后台获取。 2)registerAppWithDescription(appid, appdesc):   此方法只支持

永远年轻,永远热泪盈眶 2948

LLaMA-Factory全面指南:从训练到部署

LLaMA-Factory项目是一个专注于大模型训练、微调、推理和部署的开源平台。其主要目标是提供一个全面且高效的解决方案,帮助研究人员和开发者快速实现大模型的定制化需求。简化大模型训练流程:通过提供一系列预设的训练脚本和参数配置,降低用户在训练大模型时的技术门槛,使得即使是初学者也能轻松上手。增强模型微调能力:支持多种微调方法,如LoRA、QLoRA等,使用户能够根据特定任务需求对模型进行精细调整,从而提升模型性能。优化推理和部署体验。

全世界的博客 1万+

3步打造高转化微信商城界面:wechat-app-mall UI设计终极指南

想要快速构建一个既美观又高效的微信小程序商城?wechat-app-mall框架为您提供了完美的解决方案!这个强大的微信小程序开发框架,通过精心设计的UI组件和布局模板,让您轻松打造专业级电商界面。无论您是电商新手还是经验丰富的开发者,这个框架都能帮助您在最短时间内实现理想的商城设计效果。 ## 🎯 第一步:搭建基础商城架构 wechat-app-mall框架的核心优势在于其模块化的设计理念

gitblog_00309的博客 513

LSTM量化选股实战:从数据清洗到回测归因的工程化闭环

LSTM(长短期记忆网络)是一种专为建模长程依赖而设计的循环神经网络,其门控机制能有效应对金融时序数据的非线性、高噪声与动态演化特性。相比传统统计模型或简单RNN,LSTM在股价趋势建模中展现出更强的鲁棒性与泛化能力,尤其适合处理日频多因子时序信号。其技术价值不仅在于提升预测精度,更在于支撑可归因、可审计的量化策略工程实践——从特征构建、标签定义到滚动回测,每一步都需严防未来信息泄露与过拟合风险。典型应用场景包括A股多因子选股、行业轮动信号生成及Alpha组合优化。本文聚焦LSTM在真实量化场景中的落地难点

weixin_33158887的博客 398

OpenCV透视变换原理与实战:从单应性矩阵到文档矫正

透视变换是计算机视觉中实现平面图像几何校正的基础技术,其核心在于利用单应性矩阵(Homography)建模三维空间到二维图像的射影关系。不同于仿射变换的线性约束,透视变换通过有理函数映射支持任意凸四边形间的非线性变形,天然适配真实场景中的远小近大、平行线汇聚等透视现象。该技术具备确定性强、计算高效、无需训练数据等工程优势,广泛应用于文档扫描矫正、车牌识别预处理、AR贴图对齐及无人机正射影像生成等场景。结合OpenCV的cv2.findHomography与cv2.warpPerspective接口,开发者可

weixin_30873847的博客 654

首页UI框架:FirstUI-for-WeChat,赋能微信小程序开发

首页UI框架:FirstUI-for-WeChat,赋能微信小程序开发 项目简介 是一个专为微信小程序设计的轻量级、高性能的前端UI库,旨在简化微信小程序的界面构建过程,提供一套统一且易于使用的组件库。这个项目由FirstUI团队打造,具有高度可定制化和良好的扩展性,帮助开发者快速、高效地完成微信小程序的界面设计与实现。 技术分析 FirstUI-weixin基于微信小程序的原生语法,利用其组件化...

gitblog_00029的博客 590

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 207

Ubuntu docker 安装 QQ/微信wechat

Ubuntu安装docker docker安装Tim_QQ docker安装微信wechat docker安装微信wechat

C_designernewfly的博客 1270

【AI大模型:前沿】46、AI+无人机:智能飞行革命全景指南——从技术突破到行业应用与未来趋势

AI+无人机的融合不仅是技术迭代,更是“空间生产力”的革命——它将人类活动范围从地面拓展至低空,重构物流、农业、应急等行业的生产方式。当前,技术突破(如多模态感知、群体智能)与法规松绑(超视距飞行许可)正加速产业化,预计2030年全球低空经济市场规模将突破万亿美元。技术层:轻量化AI模型、边缘-云端协同、安全冗余系统;应用层:垂直领域解决方案(如电网AI巡检、精准农业);生态层:无人机巢建设、空管系统、数据服务平台。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 5591

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1374

【亲测免费】 微信消息导出工具:wechat-dump

`wechat-dump` 是一个开源项目,旨在帮助用户从安卓设备中导出微信的加密消息历史记录。该项目主要使用 **Python** 语言编写,适用于 Linux、Mac OSX 和 Windows 10+ 系统。通过逆向工程微信的消息存储协议,该项目提供了一个工具来解密和解析微信消息,并将其渲染为包含语音消息、图片、表情符号和视频的自包含 HTML 文件。 ## 项目核心功能 1. **消息...

gitblog_07663的博客 1750

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Duix.Avatar 三步本地部署:让电脑产出AI数字人口播视频

Duix.Avatar 是一个可以本地部署的开源 AI 数字人项目。这篇教程带你从一段 10 秒视频的克隆,到数字人克隆,再到生成一条成品口播视频,全程算力跑在你自己的电脑里。读完你应该能在本地跑通一条口播视频,并知道怎么复现整个流程。 ## 🎬 从一个任务说起:不露脸拍一条产品口播视频 平时拍一条产品口播视频,要么架机器、找出镜、反复重拍,要么用云端数字人服务——按次收费,素材还要经过第三

gitblog_00710的博客 946

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

flutter-wechat:模拟微信的实用Flutter应用

flutter-wechat:模拟微信的实用Flutter应用 项目介绍 flutter-wechat 是一个使用 Flutter 框架开发的微信应用模拟器。项目初衷是为了探索 Flutter 在构建移动应用方面的潜力,同时模仿微信的用户界面和交互体验。这个项目不仅提供了静态页面的展示,还包括动态交互功能,为开发者提供了一个学习Flutter框架的良好示例。 项目技术分析 开发环境 flutter...

gitblog_00759的博客 622

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SwiftUI-WeChat:如何用现代UI框架打造微信7.0完整体验

SwiftUI-WeChat是一个基于SwiftUI 2框架开发的开源项目,旨在通过现代UI技术复刻微信7.0版本的核心功能与界面设计。该项目不仅为iOS开发者提供了学习SwiftUI的实战案例,还展示了如何构建接近原生应用体验的跨平台界面,支持iOS 14+系统并完全适配深色模式。 ## 项目核心价值:为什么选择SwiftUI-WeChat? 对于iOS开发新手来说,SwiftUI-WeCh

gitblog_00147的博客 828

探索微创新:`flymysql/WeChat-applets` - 在微信小程序中无缝管理MySQL数据库

探索微创新:flymysql/WeChat-applets - 在微信小程序中无缝管理MySQL数据库 WeChat-applets ????????微信小程序小鸡单词 项目地址: https://gitcode.com/gh_mirrors/we/WeChat-applet...

gitblog_00098的博客 1091
上一篇: ios8的tableView使用
下一篇: ios仿微信的demo
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值