我想制作一个标签,其中的文字会从" Loading" - > "安装&#34。 - >"中.." - > "加载中"动态地,只要该标签存在。
所以我刚创建了一个标签,并添加了一个我称之为animateDots
的函数,它只是一直在调用自己。我使用UIView.animateWithDuration()
完成了它,每个完成块调用另一个animateWithDuration()
,直到它只调用animateDots()
,依此类推。但这并不奏效,因为UILabel中的文本不具有动画效果,所以它只是快速地激活所有四个标签。我希望它很慢。
我尝试了UIView.preformWithoutAnimation
,我也尝试了UIView.beginAnimations
,但我无法回忆animateDots()
而不会导致应用崩溃。我不知道还有什么可以尝试
编辑:由于@ 7vikram7的建议,我在这里解决了这个问题。
我在初始化标签后立即创建了计时器,并重复计时器。每次计时器完成循环时,它都会运行一个选择器,在本例中为animateDots
,它会更改文本。在代码中:
每当您想要开始动画过程时添加它:
loading = UILabel(frame: CGRectMake(0,0,80,50))
loading.text = "Loading"
let timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector:
#selector(LoadingCell.animateDots), userInfo: nil, repeats: true)
timer.fire()
然后添加此功能:
func animateDots() {
switch (loading.text!) {
case "Loading...":
loading.text = "Loading"
case "Loading":
loading.text = "Loading."
case "Loading.":
loading.text = "Loading.."
case "Loading..":
loading.text = "Loading..."
default:
loading.text = "Loading"
}
}
答案 0 :(得分:2)
您可以使用NSTimer。安排一个间隔为2或3秒的计时器重复。
答案 1 :(得分:2)
复制并过去进入项目并更改计时器和秒的值
当您想要动画文本时启动计时器,并在不使用时停止
NSTimer *myticker = [NSTimer scheduledTimerWithTimeInterval:(set your time) target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
-(void)showActivity {
second=second-0.5; // set your second
if (second <= 0) {
[myticker invalidate];
}
if (second >= 5) {
if ([connectingLabel.text isEqualToString:@"Connecting."]) {
connectingLabel.text = @"Connecting..";
}else if ([connectingLabel.text isEqualToString:@"Connecting.."]) {
connectingLabel.text = @"Connecting...";
}else if ([connectingLabel.text isEqualToString:@"Connecting..."]) {
connectingLabel.text = @"Connecting.";
}else{
connectingLabel.text = @"Connecting.";
}
}else{
connectingLabel.text = @"";
}
}
答案 2 :(得分:1)
Swos的Swift 5版本答案
var myticker : Timer?
func LabelAnimating() {
myticker = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(showLoading), userInfo: nil, repeats: true)
}
@objc func showLoading() {
if findingTripsLbl.text == "Connecting." {
findingTripsLbl.text = "Connecting.."
} else if findingTripsLbl.text == "Connecting.." {
findingTripsLbl.text = "Connecting..."
} else if findingTripsLbl.text == "Connecting..." {
findingTripsLbl.text = "Connecting."
} else {
findingTripsLbl.text = "Connecting."
}}
func StopLoading() {
myticker?.invalidate()
}
答案 3 :(得分:0)
你也可以创建4个这样的图像,你可以设置<center>
<label style="font-size:40px">Please Enter A Number Here:</label>
<input type="text" id="num" style="font-size:40px">
<br />
<br />
<br />
<br />
<button type="button" onclick="check()" style="font-size:20px">Check</button>
<br />
<br />
<br />
<br />
<button type="button" onclick="abs()" style="font-size:20px">Absolute Value</button>
<br />
<br />
<br />
<br />
<button type="button" onclick="round()" style="font-size:20px">Rounded Value</button>
<br />
<br />
<br />
<br />
<button type="button" onclick="log()" style="font-size:20px">Log Value</button>
<br />
<br />
</center>
的动画。它给出了你想要的相同结果。
答案 4 :(得分:0)
MarqueeLabel可以帮助您轻松修改。您可以将加载文本设为不同的标签,并使 DOTS 文本成为MarqueeLabel,或者您完全使所有三个点分别隐藏和取消隐藏它们。后者是一种非常繁琐的方法,并且非常不受推荐,因此首先使用。
pod MarqueeLabel
MarqueeLabel提供此功能。只需将标签的类名设置为MarqueeLabel:
@IBOutlet weak var lblLocation: MarqueeLabel!
根据您的要求设置属性: