• 使用UILabel实现滚动字幕移动效果


    使用UILabel实现滚动字幕移动效果

    这个链接中的代码也实现了这种效果

    https://github.com/cbpowell/MarqueeLabel

    最终效果如下:

    原理如下:

    1. 获取文本

    2. 计算文本宽度

    3. 将这个Label放入ScrollView中

    4. 将ScrollView的contentSize的宽度设置与文本宽度一致

    5. 做动画

    *6. 边缘的渐隐效果请使用带透明像素的PNG图片

    //
    //  RootViewController.m
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "YXKit.h"
    #import "FontPool.h"
    
    @interface RootViewController ()
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor blackColor];
    
        // 注册字体
        REGISTER_FONT(bundleFont(@"新蒂小丸子体.ttf"), @"新蒂小丸子体");
        
        // 获取文本
        NSString *string = @"  喜欢这首情思幽幽的曲子,仿佛多么遥远,在感叹着前世的情缘,又是那么柔软,在祈愿着来世的缠绵。《莲的心事》,你似琉璃一样的晶莹,柔柔地拨动我多情的心弦。我,莲的心事,有谁知?我,莲的矜持,又有谁懂?  ";
        
        // 初始化label
        UILabel *label      = [UILabel new];
        label.text          = string;
        label.numberOfLines = 0;
        label.textColor     = [UIColor cyanColor];
        label.font          = [UIFont fontWithName:CUSTOM_FONT(@"新蒂小丸子体", 0)
                                              size:20.f];
        
        // 计算尺寸
        CGSize size         = [label boundingRectWithSize:CGSizeMake(0, 0)];
        label.frame         = (CGRect){CGPointZero, size};
    
        // 初始化ScrollView
        UIScrollView *showView = 
            [[UIScrollView alloc] initWithFrame:CGRectMake(0, 90, 320, size.height)];
        showView.contentSize   = size;
        showView.showsHorizontalScrollIndicator = NO;
        [showView addSubview:label];
        [self.view addSubview:showView];
        
        // 形成边缘的遮罩
        UIImageView *imageView = 
        [[UIImageView alloc] initWithFrame:CGRectMake(0, 90, 320, size.height)];
        imageView.image = [UIImage imageNamed:@"bg"];
        [self.view addSubview:imageView];
        
        // 动画
        [UIView animateKeyframesWithDuration:10
                                       delay:7
                                     options:UIViewKeyframeAnimationOptionAllowUserInteraction
                                  animations:^{
                                      // 计算移动的距离
                                      CGPoint point = showView.contentOffset;
                                      point.x = size.width - 320.f;
                                      showView.contentOffset = point;
                                  }
                                  completion:^(BOOL finished) {
                                      
                                  }];
    }
    
    @end
  • 相关阅读:
    poj2181 jumping cow
    poj2184
    POJ 1189 钉子和小球
    uva11019矩阵匹配器D316
    noip2015运输计划
    [LintCode] Last Position of Target
    [LintCode] K Closest Points
    [LintCode] K Closest Numbers In Sorted Array
    [LintCode] Closest Number in Sorted Array
    [LintCode] Perfect Squares
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3787963.html
Copyright © 2020-2023  润新知