2015-07-15 19 views
5

Tôi có một UIView vòng tròn:Animate UIView và giữ bán kính góc như một vòng tròn

con=[[UIView alloc] initWithFrame:CGRectMake(self.frame.size.width-size-delta, y , size, size)]; 
    con.layer.borderColor=[UIColor whiteColor].CGColor; 
    con.layer.borderWidth=1.0; 
    con.backgroundColor=[UIColor clearColor]; 
    con.layer.cornerRadius=con.frame.size.width/2.0; 
    con.clipsToBounds=YES; 
    [self addSubview:con]; 

Sau đó tôi muốn thay đổi kích thước của nó đến một lớn hơn một, nhưng khi tôi làm điều đó, vào lúc bắt đầu của hoạt hình bạn thấy một số hình dạng trực tràng, và hơn là nó thay đổi trở lại vòng tròn.

Tôi muốn có một hoạt ảnh phẳng ở nơi nó vẫn giữ nguyên như một vòng tròn khi khung của nó đang thay đổi.

CGRect frm=startConfrm; //original frame of the circle 

    frm.size.width*=2; 
    frm.size.height*=2; 
    frm.origin.y=self.frame.size.height/2.0-frm.size.height/2.0; 

    [UIView animateWithDuration:1.5 
          delay:0.0 
         options: UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         con.frame=frm; 
         con.layer.cornerRadius=con.frame.size.width/2.0; 
         } 
        completion:^(BOOL finished){ }]; 

Trả lời

7

Nếu bạn chỉ muốn mở rộng quy mô tầm nhìn của bạn, sau đó bạn có thể sử dụng dưới mã.

[UIView animateWithDuration:2.0 animations:^{ 

con.transform = CGAffineTransformMakeScale(2, 2); // it will scale as double size 

}completion:^(BOOL finished) { 
// do whatever at animation completion 
     } 
}]; 

Để thiết lập lại quan điểm trở lại kích thước bình thường,

con.transform = CGAffineTransformIdentity;

tham khảo: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/index.html#//apple_ref/c/func/CGAffineTransformMakeScale

+0

cảm ơn nó hoạt động tốt, nhưng làm thế nào bạn có thể mang nó trở lại kích thước trước để thời gian tới tôi có thể làm động nó một lần nữa (như đập tim) – Curnelious

+0

thực sự tôi đã thử vài tùy chọn khác nhau, hoạt hình này sẽ diễn ra trong khoảng thời gian, với bộ đếm thời gian thời gian nó kết thúc tôi muốn bắt đầu lại. vì vậy tôi đã cố gắng rescale nó để 0,0 hoặc 1,1 nhưng những gì xảy ra là thời gian tới kích thước của nó là lớn hơn nhiều, như một trong những quy mô. Tôi không thể mang nó đến chế độ xem ban đầu, ngay cả khi tôi đặt khung hình trở lại 0. – Curnelious

+0

không hoạt động. – Curnelious

4

Để làm cho chế độ xem "phát triển" vào vị trí, không tạo hiệu ứng cho khung. Animate biến đổi.

Tải subview của bạn từ ngòi bút. Đặt biến đổi thành thang tỷ lệ 0:

view.transform = CGAffineTransformMakeScale(1,1); 

Sau đó thêm nó vào giám sát của bạn.

Bên trong khối hoạt hình, thiết lập các biến để nhận dạng:

view.transform = CGAffineTransformIdentity; 

Và quan điểm sẽ phát triển đến kích thước bình thường. Bạn có thể cần phải fiddle với điểm neo để làm cho nó phát triển từ đúng điểm.

Bạn cũng có thể thay đổi khung trong khối, nhưng để di chuyển chế độ xem chỉ tôi muốn thay đổi thuộc tính trung tâm, bạn không nên cố gắng đặt khung nếu bạn cũng có biến đổi.

Hy vọng nó sẽ giúp bạn !!

EDIT: Thay thế khối mã hình ảnh động của bạn với đoạn mã sau:

[UIView animateWithDuration:1.5 
          delay:0.0 
         options: UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         CGAffineTransform newTransform; 
         newTransform = CGAffineTransformMakeScale(0, 0); 
         con.transform = CGAffineTransformScale(newTransform,2,2); 
        } 
        completion:^(BOOL finished){ }]; 
+0

thanks a lot, tôi không chắc chắn whats thứ tự của các hoạt động. dòng đầu tiên của bạn nói để thiết lập biến đổi của nó thành 1, mà không có gì (?) so với những gì dòng khác không? tôi không hiểu bạn, tôi xin lỗi .. – Curnelious

+0

@Curnelious xem chỉnh sửa của tôi. –

+0

Nếu tôi làm điều đó, không có gì xảy ra, chế độ xem biến mất và tôi nhận được lỗi này: : CGAffineTransformInvert: ma trận số ít. – Curnelious

Các vấn đề liên quan