OC TableView中自定义Cell实现文字滚动效果

需求:有一个动态需要更新的TableView,每一个Cell显示的内容从网络获取,并且Cell中有一个需要显示文字的Label,当文字太长的时候,不能完全显示,所以采用跑马灯的样式

实现:1. IB的方式(??)

   2.纯代码(?)

IB的层次关系

  

实现的功能:

1.动态获取文字的实际长度

2.设置滚动的收尾位置

代码:

1.TitleRolling.h

@interface TitleRolling : UIViewController
-(void) startScroll : (UIScrollView*) scrollview;
@end

2.TitleRolling.m

#import "TitleRolling.h"

#pragma mark - Class define variable
#define K_MAIN_VIEW_SCROLL_HEIGHT 20.0f
#define K_MAIN_VIEW_SCROLL_TEXT_TAG 300
#define K_MAIN_VIEW_TEME_INTERVAL 0.35         //计时器间隔时间(单位秒)
#define K_MAIN_VIEW_SCROLLER_SPACE 20          //每次移动的距离
#define K_MAIN_VIEW_SCROLLER_LABLE_WIDTH  280  //字体宽度
#define K_MAIN_VIEW_SCROLLER_LABLE_MARGIN 20   //前后间隔距离

#define K_MAIN_VIEW_SCROLLER_LABLE_LENGTH2LEFT 20   //设置开头距离左侧的边距

-(void) startScroll : (UIScrollView*) view{

        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
        [dict setObject:view forKey:@"scrollView"];
        NSTimer *timer_hsf = [NSTimer scheduledTimerWithTimeInterval:K_MAIN_VIEW_TEME_INTERVAL target:self selector:@selector(OnTimesetScrollText: ) userInfo:dict repeats:YES];

    [timer_hsf fire];
}

-(void) OnTimesetScrollText:(NSTimer *)timer{
    UIScrollView* view = [[timer userInfo] objectForKey:@"scrollView"];

    [UIView animateWithDuration:K_MAIN_VIEW_TEME_INTERVAL * 2 animations:^{
        CGRect rect;
        CGFloat offsetX = 0.0;

        //NSLog(@"view的子视图数量%lu",(unsigned long)view.subviews.count);
        UILabel *lab = view.subviews[0];
//        for (UILabel *lab in view.subviews) {
            //NSLog(@"lab: %f view:%f",lab.frame.size.width,view.frame.size.width);

            rect = lab.frame;
            offsetX = rect.origin.x - K_MAIN_VIEW_SCROLLER_SPACE;
            if (offsetX < - (rect.size.width-view.frame.size.width+4*K_MAIN_VIEW_SCROLLER_LABLE_LENGTH2LEFT))
            {
                offsetX = K_MAIN_VIEW_SCROLLER_LABLE_MARGIN + K_MAIN_VIEW_SCROLLER_LABLE_LENGTH2LEFT;//设置初始位置
            }

            lab.frame = CGRectMake(offsetX, rect.origin.y, rect.size.width, rect.size.height);

//        }

        //NSLog(@"offsetX:%f",offsetX);

    }];

}

#pragma 文字自适应宽度,该代码只有在纯代码模式里边,设置UILabel时候会使用到
- (CGFloat)getWidthWithTitle:(NSString *)title font:(UIFont *)font {
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 1000, 0)];
    label.text = title;
    label.font = font;
    [label sizeToFit];
    return label.frame.size.width;
}

调用:

  在ViewController中设置TableView的代理:

-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //单元格ID
    static NSString *CellTableIndentifier = @"HSFCell";

    //重用单元格
    HSF_liquidText *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIndentifier forIndexPath:indexPath];

    cell.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.0f];//单元格透明step2
    //添加图片
    cell.CaseTextContent.text = @"南山区1234567就暗示的看见爱上大家哈山东矿机爱神的箭好看好看";
    //添加右侧注释
    TitleRolling *newTitle = [[TitleRolling alloc] init];
    if(cell.CaseScrollView != nil)
    {
        //[cell.CaseScrollView addSubview:cell.CaseTextContent];
        [newTitle startScroll:cell.CaseScrollView];
    }
    else
        NSLog(@"cell的父视图:%@",cell.superview);

    return cell;
}

原文地址:https://www.cnblogs.com/JMarshall/p/10917785.html

时间: 2024-10-09 22:38:23

OC TableView中自定义Cell实现文字滚动效果的相关文章

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见 (2015-12-05 12:48:20)[编辑][删除] 转载▼     首先我们先明确一下问题: 1.因为UI是在主线程中更新的,不能在down数据的同时显示界面,这样会使得下载的时间占用主线程,导致的后果就是你的屏幕就那样的卡死在哪了 2.如果要解觉问题1,就势必要将其下载数据的环节放在其他分线程上来实现,但是这里还会遇见一个问题,分线程的执行是不会有序的,这样,在动态显示的过 程中,cell中的数据就会混乱的变

UITableView (4): 在TableView中移动cell和Section 从TableView中删除cell和section

一  .问题:你想用流畅直观的动画来移动和拖拽TableView中的cell和section 方案: 用moveSection:toSection:方法把一个Section移动到新位置. 用moveRowAtIndexPath:toIndexPath:方法把一个cell从当前位置移动到新位置 例子: 创建一个TableView并在其中加载3个Section,每个Section有3个cell #pragma - mark 初始化数据 - (NSMutableArray *)newSectionWi

Flash 开发环境搭建和文字滚动效果实例

一.Flash 开发环境搭建 Flash发布的时候可以将资源(即将库中的元件)集成到swf运行文件中.Flash没有代码自动输入补全功能,因此需要一个英文一个英文手工输入,这样要记住很多系统类和方法.而FlashDevelop由代码自动输入补全功能,防止输入过程中出现错误,并提高代码编写效率,使我们将注意力集中到逻辑代码编写中. 1.安装Flash CS3或CS4.CS5. 我安装的是Flash CS4 下载Flash CS4.点击下一步.下一步就可以. 2.安装FlashDevelop, 安装

简单的文字滚动效果

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <style type="text/css">

iOS文字滚动效果 之纵向滚动

原文链接: iOS文字滚动效果 之纵向滚动 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

iOS文字滚动效果 之横向滚动

原文链接: iOS文字滚动效果 之横向滚动 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

蓝懿iOS培训日志15 tableView和自定义Cell(1)

今天学了很多新内容  需要时间消化,笔记如下: tableView的分组 通过判断section==?来实现不同section有不同行数 需要去掉行与行之间的线时 把separator改一下default(默认)改成None    default时有线 可以改变线的颜色 TableHeaderView  和 TableFooterView tableView上面需要显示内容时 用headerView (比如点开某条微博 上面显示微博内容 下面是评论列表) 需要显示在列表尾端的用FooterVie

iOS中 自定义cell分割线/分割线偏移 韩俊强的博客

在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 1.cell 分割线不全: 解决方案1: 补全分割线 -(void)viewDidLayoutSubviews { if ([_listTableView respondsToSelector:@selector(setSep

动态切换tableView中的cell的种类

为什么要动态切换tableView中cell的种类呢?如果项目经理不出这种需求,你也就见不到这篇文章了:) 效果: 源码: 首先,你要准备3种cell,直接继承系统的就行了. // // RootViewController.m // ChangeCell // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" #import "YellowCell.h&quo