2012-10-03 59 views
16

Trong dự án xcode của tôi, tôi có UIImage. Tôi muốn làm cho nó rung động (hoạt hình) từ trái sang phải một chút. Tôi đã viết mã này, tuy nhiên, nó không hoạt động.Cách tạo hoạt ảnh "lắc"

-(void)errorShake 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.0]; 



    [lockImage setTransform:CGAffineTransformMakeRotation(-5 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(-10 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(-15 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(-20 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(-15 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(-10 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(-5 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(0 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(5 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(10 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(15 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(20 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(15 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(10 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(5 * M_PI/180.0)]; 
    [lockImage setTransform:CGAffineTransformMakeRotation(0 * M_PI/180.0)]; 


    [UIView commitAnimations]; 
} 

Bạn có thể cho tôi biết làm cách nào để làm cho hình ảnh của tôi rung?

Trả lời

45

Đây là mã tôi sử dụng cho hiệu ứng đó.

-(void)shakeView { 

     CABasicAnimation *shake = [CABasicAnimation animationWithKeyPath:@"position"]; 
     [shake setDuration:0.1]; 
     [shake setRepeatCount:2]; 
     [shake setAutoreverses:YES]; 
     [shake setFromValue:[NSValue valueWithCGPoint: 
           CGPointMake(lockImage.center.x - 5,lockImage.center.y)]]; 
     [shake setToValue:[NSValue valueWithCGPoint: 
           CGPointMake(lockImage.center.x + 5, lockImage.center.y)]]; 
     [lockImage.layer addAnimation:shake forKey:@"position"]; 
    } 

Jere được đề cập. Đảm bảo bao gồm việc nhập:

#import <QuartzCore/QuartzCore.h> 

Bạn cũng có thể thêm nó làm danh mục trên UIView.

+0

Cảm ơn! Nhưng tôi có cần thêm bất kỳ khung công tác/thư viện nào vào dự án không? Xcode đưa ra lỗi vì dòng đầu tiên. – SmartTree

+2

thêm khung công tác 'QuartzCore' vào dự án của bạn! và cũng có thể thêm '#import ' vào tệp bạn muốn sử dụng hoạt ảnh hoặc tốt hơn trong tệp tiêu đề tiền tố ứng dụng để bạn có thể xem nó từ bất kỳ lớp nào. – jere

+0

Tuyệt vời! Và một câu hỏi nữa: [trung tâm tự] là gì? – SmartTree

11

câu trả lời brynbodayles cũng hoạt động trong iOS8 để có hoạt ảnh lắc nhanh chóng.

Với Nhập khẩu QuartzCore:

func shakeView(){ 
    var shake:CABasicAnimation = CABasicAnimation(keyPath: "position") 
    shake.duration = 0.1 
    shake.repeatCount = 2 
    shake.autoreverses = true 

    var from_point:CGPoint = CGPointMake(LoginField.center.x - 5, LoginField.center.y) 
    var from_value:NSValue = NSValue(CGPoint: from_point) 

    var to_point:CGPoint = CGPointMake(LoginField.center.x + 5, LoginField.center.y) 
    var to_value:NSValue = NSValue(CGPoint: to_point) 

    shake.fromValue = from_value 
    shake.toValue = to_value 
    LoginField.layer.addAnimation(shake, forKey: "position") 
} 
+0

Cách dừng hoạt ảnh này ở giữa khi rung đang lặp lại –

-1

Từ Corona câu trả lời

Đưa hình ảnh động lắc ở nhiều nút và cả trong những SWIFT3

để xem phim hoạt hình chỉ cần thay đổi phần mở rộng UIButton để UIView mở rộng

extension UIButton 
{ 
    func shakeAnim() 
    { 
     let shake:CABasicAnimation = CABasicAnimation(keyPath: "position") 
     shake.duration = 0.1 
     shake.repeatCount = 2 
     shake.autoreverses = true 

     let from_point:CGPoint = CGPoint(x:self.center.x - 5,y: self.center.y) 
     let from_value:NSValue = NSValue(cgPoint: from_point) 

     let to_point:CGPoint = CGPoint(x:self.center.x + 5,y: self.center.y) 
     let to_value:NSValue = NSValue(cgPoint: to_point) 

     shake.fromValue = from_value 
     shake.toValue = to_value 
     self.layer.add(shake, forKey: "position") 
    } 
} 
Các vấn đề liên quan