zoukankan      html  css  js  c++  java
  • IOS跑马灯效果,实现文字水平无间断滚动

    ViewController.h

     1 #import <UIKit/UIKit.h>
     2 
     3 @interface ViewController : UIViewController{
     4     NSTimer           *timer;
     5     UIScrollView      *scrollViewText;
     6 }
     7 
     8 @property (nonatomic ,strong) NSArray *arrData;
     9 
    10 
    11 @end

    ViewController.m

      1 //
      2 //  ViewController.m
      3 //  跑马灯文字广告
      4 //
      5 //  Created by Time.X on 16/2/15.
      6 //  Copyright © 2016年 Time.X. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 
     11 #pragma mark - Class define variable
     12 #define K_MAIN_VIEW_SCROLL_HEIGHT 80.0f
     13 #define K_MAIN_VIEW_SCROLL_TEXT_TAG 300
     14 #define K_MAIN_VIEW_TEME_INTERVAL 0.35         //计时器间隔时间(单位秒)
     15 #define K_MAIN_VIEW_SCROLLER_SPACE 20          //每次移动的距离
     16 #define K_MAIN_VIEW_SCROLLER_LABLE_WIDTH  280  //字体宽度
     17 #define K_MAIN_VIEW_SCROLLER_LABLE_MARGIN 20   //前后间隔距离
     18 
     19 @interface ViewController ()
     20 
     21 @end
     22 
     23 @implementation ViewController
     24 
     25 #pragma mark - Class property
     26 @synthesize arrData;
     27 
     28 - (void)viewDidLoad {
     29     [super viewDidLoad];
     30     
     31     [self initView];
     32 }
     33 
     34 - (void)didReceiveMemoryWarning {
     35     [super didReceiveMemoryWarning];
     36     // Dispose of any resources that can be recreated.
     37 }
     38 
     39 
     40 #pragma mark - Custom method
     41 //初始化数据
     42 -(void) initView{
     43     
     44     if (!self.arrData) {
     45         self.arrData = @[
     46                          @{
     47                              @"newsId"   :@"201507070942261935",
     48                               @"newsImg"  :@"http://bg.fx678.com/HTMgr/upload/UpFiles/20150707/sy_2015070709395519.jpg",
     49                               @"newsTitle" : @"三大理由欧元任性抗跌,欧元区峰会将为希腊定调"
     50                                   },
     51                          @{
     52                              @"newsId"   :@201507070929021220,
     53                               @"newsImg"   :@"http://bg.fx678.com/HTMgr/upload/UpFiles/20150707/sy_2015070709273545.jpg",
     54                               @"newsTitle" :@"欧盟峰会或现希腊转机,黄金打响1162保卫战"
     55                               },
     56                          @{
     57                              @"newsId"    :@201507070656471857,
     58                               @"newsImg"   :@"http://bg.fx678.com/HTMgr/upload/UpFiles/20150707/2015070706533134.jpg",
     59                               @"newsTitle" :@"希腊困局欧元不怕,油价服软暴跌8%"
     60                               }
     61                          ];
     62     }
     63     
     64     //文字滚动
     65     [self initScrollText];
     66     
     67     //开启滚动
     68     [self startScroll];
     69 }
     70 
     71 
     72 //文字滚动初始化
     73 -(void) initScrollText{
     74     
     75     //获取滚动条
     76     scrollViewText = (UIScrollView *)[self.view viewWithTag:K_MAIN_VIEW_SCROLL_TEXT_TAG];
     77     if(!scrollViewText){
     78         scrollViewText = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, K_MAIN_VIEW_SCROLL_HEIGHT)];
     79         scrollViewText.showsHorizontalScrollIndicator = NO;   //隐藏水平滚动条
     80         scrollViewText.showsVerticalScrollIndicator = NO;     //隐藏垂直滚动条
     81         scrollViewText.tag = K_MAIN_VIEW_SCROLL_TEXT_TAG;
     82         [scrollViewText setBackgroundColor:[UIColor grayColor]];
     83         
     84         //清除子控件
     85         for (UIView *view in [scrollViewText subviews]) {
     86             [view removeFromSuperview];
     87         }
     88         
     89         //添加到当前视图
     90         [self.view addSubview:scrollViewText];
     91     }
     92     
     93     
     94     if (self.arrData) {
     95         
     96         CGFloat offsetX = 0 ,i = 0, h = 30;
     97         
     98         //设置滚动文字
     99         UILabel *labText = nil;
    100         for (NSDictionary *dicTemp in self.arrData) {
    101             labText = [[UILabel alloc] initWithFrame:CGRectMake(
    102                                                                 i * (K_MAIN_VIEW_SCROLLER_LABLE_WIDTH + K_MAIN_VIEW_SCROLLER_LABLE_MARGIN),
    103                                                                 (K_MAIN_VIEW_SCROLL_HEIGHT - h) / 2,
    104                                                                 K_MAIN_VIEW_SCROLLER_LABLE_WIDTH,
    105                                                                 h)];
    106             [labText setFont:[UIFont systemFontOfSize:18]];
    107             [labText setTextColor:[UIColor whiteColor]];
    108             labText.text = dicTemp[@"newsTitle"];
    109             offsetX += labText.frame.origin.x;
    110             
    111             //添加到滚动视图
    112             [scrollViewText addSubview:labText];
    113             
    114             i++;
    115         }
    116         
    117         //设置滚动区域大小
    118         [scrollViewText setContentSize:CGSizeMake(offsetX, 0)];
    119     }
    120 }
    121 
    122 
    123 //开始滚动
    124 -(void) startScroll{
    125     
    126     if (!timer)
    127         timer = [NSTimer scheduledTimerWithTimeInterval:K_MAIN_VIEW_TEME_INTERVAL target:self selector:@selector(setScrollText) userInfo:nil repeats:YES];
    128     
    129     [timer fire];
    130 }
    131 
    132 
    133 //滚动处理
    134 -(void) setScrollText{
    135     
    136     CGFloat startX = scrollViewText.contentSize.width - K_MAIN_VIEW_SCROLLER_LABLE_WIDTH - K_MAIN_VIEW_SCROLLER_LABLE_MARGIN;
    137     
    138     [UIView animateWithDuration:K_MAIN_VIEW_TEME_INTERVAL * 2 animations:^{
    139         CGRect rect;
    140         CGFloat offsetX = 0.0;
    141         
    142         for (UILabel *lab in scrollViewText.subviews) {
    143             
    144             rect = lab.frame;
    145             offsetX = rect.origin.x - K_MAIN_VIEW_SCROLLER_SPACE;
    146             if (offsetX < -K_MAIN_VIEW_SCROLLER_LABLE_WIDTH)
    147                 offsetX = startX;
    148             
    149             lab.frame = CGRectMake(offsetX, rect.origin.y, rect.size.width, rect.size.height);
    150         }
    151         
    152         NSLog(@"offsetX:%f",offsetX);
    153         
    154     }];
    155     
    156 }
    157 
    158 @end
  • 相关阅读:
    (转)S5PV210之UBOOT2011.06启动过程解析
    (转)S5PV2101210启动方式和代码前16字节
    (转)UBoot启动过程详细版的完全分析
    uboot中.lds连接脚本文件的分析
    makefile中的@
    (转)GNU ARM汇编(十七)uboot的makefile和mkconfig解读
    (转)关于uboot中的.balignl 16,0xdeadbeef的理解
    (转)ARM协处理学习
    linux下拷贝的时候有时候会出现cp:omitting directory的错误
    Quartz JobListener 任务监听器
  • 原文地址:https://www.cnblogs.com/xjy-123/p/5191011.html
Copyright © 2011-2022 走看看