2012-02-23 33 views
6

Tôi đã tìm kiếm tất cả các bài đăng trên google và stackoverflow nhưng tôi chỉ đơn giản là không thể giải quyết câu đố này. Tôi đang cố gắng tạo lại hiệu ứng mà ứng dụng todo nổi tiếng hiện tại 'Clear' thực hiện khi thêm tác vụ mới. Họ có một số loại hoạt hình từ đầu một nhiệm vụ mới xuất hiện trong một số loại hiệu ứng khối lập phương 3D. Điều đặc biệt mà họ có là khi bạn nhìn kỹ các góc dưới bên trái và bên phải luôn luôn ở cùng một chỗ.UIView 3DCube như Clear-app

Ngay bây giờ tôi có những điều sau đây: một UIView của 320x460 đặt tại điểm 0,0 và một UIView của 320x460 đặt tại điểm (0, -460). Những gì tôi muốn là UIView hàng đầu để đi xuống trong cùng một hiệu ứng khối lập phương như Clear từ đầu. Đây là những gì tôi có cho đến nay:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //startLoc is defined globally to remember the first position 
    startLoc = [[touches anyObject] locationInView:self]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint location = [[touches anyObject] locationInView:self]; 
    float difference = location.y-startLoc.y;   

    if(diff > 0 && diff < 90) 
    { 
     //Init the transform 
     CATransform3D transform = CATransform3DIdentity; 
     transform.m34 = perspective; 
     //Rotate (radians is a degree-to radians function) 
     transform = CATransform3DRotate(transform, radians(90-diff), 1.0f, 0.0f, 0.0f); 
     //Also translate the view down   
     transform = CATransform3DTranslate(transform, 0.0f, 230+diff, 0.0f); 
     //the 230 is necessary I think for the Anchorpoint but I'm not sure 
     secondView.layer.transform = transform; 
}  

}

Nó hoạt động bằng cách nào đó nhưng không chính xác, ngay sau khi tôi làm chuyển động quay nhìn trở nên lớn hơn và các góc dưới bên trái và bottomright là ra khỏi lượt xem. Nếu tôi làm cho khung nhìn nhỏ hơn và sau đó làm một 3Dscale nó cũng sai lầm. Tôi đã giải quyết vấn đề một nửa của hình ảnh biến mất bằng cách thiết lập đúng zPosition của các lớp, nhưng điều này là xa như tôi nhận được. Tôi đã cố gắng sử dụng mã từ các dự án khác nhưng tất cả hiệu ứng khối lập phương 3D của chúng không giống với ứng dụng 'Xóa'. Người duy nhất đến gần là dự án iCarousel nhưng tôi không thể sử dụng mã chính xác từ ứng dụng, tôi không thể làm cho nó hoạt động. Ai đó có thể giúp tôi?

Trả lời

2

Dưới đây là một số liên kết mà cụ thể bao gồm các chủ đề về biến đổi quan điểm UIView 3D:

http://www.sunsetlakesoftware.com/2008/10/22/3-d-rotation-without-trackball

http://watchingapple.com/2008/04/core-animation-3d-perspective/

bài này cũng có liên quan: How do I apply a perspective transform to a UIView?

+0

hi Adam, cảm ơn các liên kết nhưng tiếc là tôi đã nhìn thấy tất cả chúng ngày hôm qua khi tìm kiếm. Như tôi đã nói trong bài đăng của mình, họ đã làm điều gì đó đặc biệt hơn trong ứng dụng Xóa và những bài đăng đó không giải thích cách họ đã làm điều đó. –

+0

Không có gì đặc biệt khủng khiếp về những gì Clear làm. Bạn chỉ cần tìm ra sự kết hợp đúng của vị trí xoay/dịch/neo/z, v.v. Có vẻ như tôi là điểm neo nằm ở giữa phía dưới của khung nhìn, ban đầu được xoay -90 độ xung quanh trục x (tức là đối với "bên trong" của điện thoại). Sau đó, khi chế độ xem bảng được cuộn xuống, chế độ xem mới được dịch xuống để khớp với phần trên cùng của nội dung hiện có trong khi cũng được quay trở lại song song với màn hình. – UIAdam

+0

Được rồi, cảm ơn lời khuyên của bạn, tôi thực sự đã sử dụng scrollview ngay bây giờ và đặt điểm neo như bạn đã nói và nó đột nhiên hoạt động. Khi không sử dụng scrollview hình ảnh luôn luôn trở nên lớn hơn hoặc một cái gì đó và bây giờ không còn nữa! Dù sao cũng cảm ơn bạn! –