2012-07-15 36 views
11

Có cách nào để tạo hoạt ảnh cho thuộc tính textColor của UIButton không? Tôi đã tìm thấy một số giải pháp cho hoạt ảnh màu chữ UILabel, nhưng chưa thấy bất kỳ giải pháp nào cho UIButton.Màu chữ hoạt ảnh UIButton

Trả lời

6

NSTimer là hoàn toàn không tốt như một công cụ hoạt hình, và cũng không nên nó được sử dụng để chấm công nói chung nơi chính xác là cần thiết (tốc độ khung hình) blog post này một cách hoàn hảo minh họa của tôi vị trí về những gì cần làm về các thuộc tính UILabel không thể sinh động, sẽ được gửi tới máy chủ kết xuất thông qua CA chứ không phải NSTimer. Thay vì UILabel, bạn có thể sử dụng hoặc bọc CATextLayer và tạo hiệu ứng động là thuộc tính foregroundColor trong khối hoạt ảnh tiêu chuẩn.

+0

Liên kết bị hỏng, nó sẽ là tốt với một ví dụ ... – user1506145

+2

Liên kết không bị hỏng ... – CodaFi

0

Rõ ràng bạn sẽ cần phải sử dụng

[UIButton setTitleColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] forState:UIControlStateNormal]; 

Đối với thực sự nhận được nó để animate và thay đổi màu theo thời gian, bạn cần phải tạo một thể hiện của NSTimer và sử dụng paramater @selector để trỏ nó đến một phương pháp cụ thể để chạy. Mỗi khi bộ đếm thời gian chạy, nó kích hoạt phương pháp mà sau đó thay đổi màu sắc của UIButton của bạn.

[NSTimer scheduledTimerWithTimeInterval:2.0f 
     target:self 
    selector:@selector(updateCounter:) 
    userInfo:nil 
    repeats:YES]; 

Ngoài ra kiểm tra: http://servin.com/iphone/iPhone-Timers-and-Animated-Views.html

+0

Đồng ý. +1 cho liên kết – bkbeachlabs

+0

Lưu ý rằng đây không phải là sự thay thế cho hoạt ảnh tốt của CA. Các đối tượng UIColor có thể không hoạt hình được, nhưng hoàn toàn là các đối tượng CGColor. Nếu bạn có thể phân lớp UILabel, thì bạn có thể thực hiện hiển thị văn bản của riêng mình và sử dụng hoạt ảnh CA vốn có. – CodaFi

-2

isnt Đây thực sự là một hình ảnh động, nhưng nó sẽ làm việc.

Tạo bộ hẹn giờ với tần suất bất kỳ mà bạn muốn tạo hiệu ứng cho màu sắc.

Bộ hẹn giờ đó gọi phương thức, changeColorOnButton mỗi khi nó kích hoạt.

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(changeColorOnButton:) userInfo:nil repeats:YES]; 

Tạo một mảng các màu sắc, colorsArray (hoặc sắp xếp các màu sắc trước thời hạn, hoặc thêm một bó vào một mảng và shuffle họ ngẫu nhiên. Tạo một int, intForColorInArray.

Trong phương pháp changeColorOnButton , làm như sau:.

- (void) changeColorOnButton:(UIButton *) button { 

    UIColor *nextColor = [colorsArray objectAtIndex:intForColorArray]; 
    [button.titleLabel.setTextColor:nextColor]; 
    intForColorArray = (intForColorArray +1) % [colorsArray count]; 
} 
+0

đã sử dụng phương thức hẹn giờ từ @Stuartsoft. Tín dụng có tín dụng đến hạn. – bkbeachlabs

1

Điều này được trả lời rất tốt here. Về cơ bản, nó sử dụng công cụ tiện dụng này: [UIView transitionWithView: duration: options: animations: ^() completion: ^()];

13

Sử dụng chuyển tiếp với quan điểm

[UIView transitionWithView:backButton 
          duration:0.5f 
          options:UIViewAnimationOptionTransitionCrossDissolve 
         animations:^{ 
          [backButton setTitleColor:[_peacock lighten:d.primary] forState:UIControlStateNormal]; 
         } 
         completion:^(BOOL finished){ 
         }]; 
+1

Hoạt động tuyệt vời.Ngoài ra, bạn có thể sử dụng chế độ xem gốc làm mục tiêu chính và sau đó tạo hiệu ứng cho tất cả chế độ xem con theo cách bạn muốn trong khối 'hoạt ảnh ' – Peterdk

0

Bạn có thể sử dụng hai nút (hoặc nhãn, vv) với nhiều màu sắc khác nhau mà đặt ở vị trí tương đương:

button1 = UIButton(frame: frame) 
button2 = UIButton(frame: frame) // same frame 

button1.setTitleColor(UIColor.redColor(), forState: .Normal) // red 
button2.setTitleColor(UIColor.blueColor(), forState: .Normal) // blue 

Sau đó bạn có thể đạt được hình ảnh động của màu sắc bằng hoạt ảnh chuyển tiếp của button2:

UIView.animateKeyframesWithDuration(
    1.0, delay: 0, options: [.Autoreverse, .Repeat], 
    animations: { 
     UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: { 
      self.button2.alpha = 1.0 
     }) 

     UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: { 
      self.button2.alpha = 0.0 
     }) 
    }, completion: nil) 
Các vấn đề liên quan