2013-01-24 26 views
5

Tôi sử dụng cử chỉ xoay để di chuyển hình ảnh trong CALayer. Vấn đề tôi gặp phải là hình ảnh xuất hiện để di chuyển với một chút chậm trễ và không xuất hiện 'kẹt' với ngón tay của tôi.Chậm trễ trong khi di chuyển CALayer bằng cử chỉ pan

Dưới đây là đoạn mã thực tế về cách tôi di chuyển lớp (facePic là CALayer):

CGPoint translation =[touche locationInView:self.view]; 
self.facePic.frame = 
CGRectMake(translation.x - self.facePic.frame.size.width/2, 
      translation.y - self.facePic.frame.size.height/2, 
      self.facePic.frame.size.width, 
      self.facePic.frame.size.height); 
+0

Bạn có thể tìm thấy ví dụ về cách kéo trong một ứng dụng khác không có sự chậm trễ nhỏ không? Thường có sự chậm trễ. – occulus

+0

@occulus là bạn chắc chắn không có cách nào để làm cho nó tốt hơn? Tôi cũng đã cố gắng phân lớp UIView và di chuyển lớp bằng cách ghi đè phương thức touchesMoved nhưng có hiệu ứng rất giống với một chút lạ lùng với tôi. –

Trả lời

9

Tôi nghĩ rằng bạn nhìn thấy kết quả của ngầm hình ảnh động của một lớp. Nếu vậy thì có hai tùy chọn để vô hiệu hóa hình ảnh động này:

  1. giao dịch sử dụng
  2. lớp bộ hành động

Để sử dụng các giao dịch quấn mã của bạn với CATransaction

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
. . . 
[CATransaction commit]; 

Để vô hiệu hóa một số hành động lớp bạn có thể thêm lớp này vào lớp init, hoạt ảnh vị trí ví dụ:

aLayer.actions = @{@"position":[NSNull null]}; // FIXED property name 
+1

Tôi nghĩ bạn có nghĩa là "hoạt hình ngầm". Ngoài ra, nó ngắn hơn để nói '[CATransaction setDisableActions: YES]'. –

+1

Ngoài ra, nó phải là 'aLayer.actions = ...'. Tên thuộc tính là 'actions', không phải' action'. –

+0

@robmayoff bạn hoàn toàn đúng – voromax

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