gpt4 book ai didi

iphone - 如何滚动标签上的文本(如选框)

转载 作者:行者123 更新时间:2023-12-03 21:08:07 32 4
gpt4 key购买 nike

我的标签上的文本未完全显示,因此我希望文本在标签上从左到右滚动。请不要建议将 numberoflines 属性作为解决方案。

最佳答案

FWIW,我在 ScrollView 中使用 2 个标签做了类似的事情...

#import <UIKit/UIKit.h>

@interface ScrolledTextView : UIScrollView
{
UILabel *label1;
UILabel *label2;

NSString *_text;
NSString *newText;

CGFloat textWidth;

BOOL animating;
BOOL needToUpdateText;
}

@property (nonatomic, copy, setter = setText:) NSString *text;
@property (nonatomic, assign) NSTimeInterval scrollInterval;
@property (nonatomic, assign) NSTimeInterval scrollDuration;

- (id) initWithFrame:(CGRect)frame andText : (NSString*) text;

- (void) setText:(NSString *)text;

- (BOOL) textFitsInFrame;

@implementation ScrolledTextView

@synthesize text = _text;
@synthesize scrollDuration;
@synthesize scrollInterval;

- (void) adjustLabelsForNewText : (NSString*) text andParentFrame : (CGRect) frame
{
_text = [NSString stringWithFormat:@"%@ ", text];

CGSize textSize = [[self text] sizeWithFont:[label1 font] constrainedToSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) lineBreakMode:UILineBreakModeClip];
[self setContentSize:CGSizeMake(textSize.width * 2, textSize.height)];

textWidth = textSize.width;

[label1 setFrame:CGRectMake(0.0, 0.0, textWidth, frame.size.height)];
[label1 setText:[self text]];

if([self textFitsInFrame])
{
[label2 removeFromSuperview];
}
else
{
[label2 setFrame:CGRectMake([label1 frame].size.width, 0.0, textWidth, frame.size.height)];
[label2 setText:[self text]];

if( ! [[self subviews] containsObject:label2])
{
[self addSubview:label2];
}

[self beginScrolling];
}
}

- (id) initWithFrame:(CGRect)frame andText : (NSString*) text
{
self = [super initWithFrame:frame];
if (self) {
[self setClipsToBounds:YES];

animating = NO;
needToUpdateText = NO;

[self setScrollDuration:10.0];
[self setScrollInterval:2.0];

label1 = [UILabel new];
label2 = [UILabel new];

[label1 setBackgroundColor:[UIColor clearColor]];
[label2 setBackgroundColor:[UIColor clearColor]];

[self addSubview:label1];

[self adjustLabelsForNewText:text andParentFrame:frame];
}

return self;
}

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
if(needToUpdateText)
{
animating = NO;
needToUpdateText = NO;
[self adjustLabelsForNewText:@"" andParentFrame:[self frame]];
[self adjustLabelsForNewText:newText andParentFrame:[self frame]];
newText = nil;

return;
}

[self setContentOffset:CGPointMake(0.0, 0.0)];
[self beginScrolling];
}

- (void) beginScrolling
{
animating = YES;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:[self scrollDuration]];
[UIView setAnimationDelay:[self scrollInterval]];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];

[self setContentOffset:CGPointMake(textWidth, 0.0)];

[UIView commitAnimations];
}

- (BOOL) textFitsInFrame
{
return textWidth <= [self frame].size.width;
}

- (void) setText:(NSString *)text
{
if(animating)
{
newText = text;
needToUpdateText = YES;
}
else
{
[self adjustLabelsForNewText:text andParentFrame:[self frame]];
}
}

关于iphone - 如何滚动标签上的文本(如选框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5140542/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com