Ngay bây giờ tôi đang điền UIScrollView với một loạt chế độ xem. Các khung nhìn cần được biến dạng để làm cho UIScrollView xuất hiện như một băng chuyền. Nói cách khác khi người dùng cuộn nó cần phải giống như một vòng tròn. Tôi đã không bao giờ làm bất cứ điều gì khá như thế này trước đây, nhưng tôi giả sử CoreAnimation là ra câu hỏi và OpenGL cần phải được sử dụng. Nếu điều này là có thể với CoreAnimation hoặc Quartz sau đó tôi thực sự chỉ cần một mẫu về cách warp các quan điểm và tôi có thể hình phần còn lại ra bản thân mình nhưng tôi không quen thuộc với OpenGL.Chế độ xem cong/cong vênh với CoreAnimation hoặc OpenGL cho hiệu ứng băng chuyền
Trả lời
Theo kinh nghiệm của tôi, nó là một chút khó khăn để có được những giá trị đúng đắn. Cách để cung cấp cho một quan điểm xem là bằng cách thao tác biến đổi lớp của nó. Tôi đã sử dụng phương pháp sau để đạt được transfor cho một hiệu ứng tương tự:
-(CATransform3D)makeTransformForAngle:(CGFloat)angle from:(CATransform3D)start{
CATransform3D transform = start;
// the following two lines are the key to achieve the perspective effect
CATransform3D persp = CATransform3DIdentity;
persp.m34 = 1.0/-1000;
transform = CATransform3DConcat(transform, persp);
transform = CATransform3DRotate(transform,angle, 0.0, 1.0, 0.0);
return transform;
}
Điều này được thực hiện để tạo hoạt ảnh "lật trang", vì vậy bạn có thể cần phải điều chỉnh. Để sử dụng, hãy thực hiện theo các bước sau:
flip_page.layer.transform = [self makeTransformForAngle:angle from:CATransform3DIdentity];
trong đó flip_page là UIView. Chúc mừng!
Cảm ơn! Vấn đề chính của tôi là làm cong các quan điểm riêng lẻ như được hiển thị ở trên. Bạn có biết làm thế nào để đi về điều này? –
Tôi hiểu. Đối với điều đó, tất nhiên, một biến đổi tuyến tính là không đủ. Tôi chắc rằng bạn có thể tạo lưới trong OpenGL và tát kết cấu. Nhưng điều đó có vẻ như quá mức. Tôi hy vọng câu hỏi này sẽ có một câu trả lời thông minh;) – fsaint
Điều này cho phép tôi thêm phối cảnh vào các chế độ xem riêng lẻ, điều này là cần thiết. Tuy nhiên, họ cũng cần phải bị biến dạng. –
Nếu bạn muốn làm cong các chế độ xem, bạn sẽ cần OpenGL hoặc bạn có thể sử dụng CAShapLayer của Core Animation cho phép bạn chỉ định một đường bezier có đường cong trong đó. Nhưng hãy nhớ rằng sự uốn cong mà bạn đang nhìn thấy có thể chỉ là ảo ảnh quang học (mặc dù trong hình ảnh của bạn ở trên nó trông giống như một đường cong thực tế). Nếu bạn có đủ hình chữ nhật với vòng xoay trục y chính xác trong một hàng, tôi nghĩ bạn có thể tìm ra hiệu ứng mà bạn đang tìm kiếm với Hoạt ảnh lõi thẳng. Tôi khá chắc chắn đó là cách mọi thứ được thực hiện trong bản demo Hoạt hình cốt lõi của Apple được cung cấp cách đây vài năm. Dưới đây là một ảnh chụp màn hình từ video từ trình bày rằng:
Tôi sai lầm xung quanh với các biến đổi của lớp một cái nhìn một chút và đến với điều này:
- (IBAction)sliderDidChange:(id)sender
{
CGFloat value = [(UISlider*)sender value];
CGFloat xOff = value - 0.5;
CATransform3D trans = CATransform3DIdentity;
trans.m34 = 1.0f/-1000.0f;
trans = CATransform3DRotate(trans, degreesToRadians(xOff * -25.0f), 0.0f, 1.0f, 0.0f);
trans = CATransform3DTranslate(trans, 0.0f, 0.0f, 900.0f * fabs(xOff));
[[frameView layer] setTransform:trans];
CGPoint center= [frameView center];
[frameView setCenter:CGPointMake(1024.0 * value, center.y)];
}
Tôi ném cùng a demo project đó cho thấy như thế nào xoay hoạt động để đáp ứng với một thanh trượt. Nó không sử dụng chế độ xem cuộn nên bạn sẽ phải điều chỉnh nó, nhưng tôi nghĩ bạn có thể theo dõi độ lệch cuộn hiện tại và áp dụng biến đổi cho phù hợp. Không chắc chắn nếu nó sẽ giúp đỡ, nhưng có nó được.
không chắc chắn 100%, nhưng tôi nghĩ rằng bạn có thể áp dụng CATransform3D cho thuộc tính lớp của chế độ xem của bạn. – jessecurry
Vâng, tôi đã đọc một chút về điều này nhưng tôi chưa bao giờ thực sự sử dụng điều đó trước đây. Bạn có biết bất kỳ mẫu nào không? –