tôi cần thao tác cùng một màu sắc trên bản đồ, và tôi quyết định rằng làm cho toàn bộ đồ màu đen và trắng có thể là giải pháp tốt hơn, đây là cách bạn có thể làm điều này:
- tạo imageCGcontex mới
- đồ render in new CGcontext
- có UIImage từ CGcontext hiện
- áp dụng CIFilter để UIImage và có CIImage kết quả
- render CIImage trong CIContext và có CGImageRef kết quả
- tạo UIImage từ CGImageRef
- thêm ImageView sub để xem bản đồ táo
- hình ảnh kết quả thiết lập để mà IMAGExem
Dưới đây là một số mã bẩn để làm điều này:
self.drawContext = [[CIContext alloc] init];
[self.monochromeSubView removeFromSuperview];
UIGraphicsBeginImageContext(self.appleMapView.bounds.size);
UIImage *mySourceImage = UIGraphicsGetImageFromCurrentImageContext();
CIImage *newMyCiImage = [[CIImage alloc] initWithImage:mySourceImage];
CIFilter *newMyMonochromeFilter = [CIFilter filterWithName:@"CIPhotoEffectTonal"];
[newMyMonochromeFilter setValue:newMyCiImage forKey:kCIInputImageKey];
CIImage *newMyfilteredCIImage = newMyMonochromeFilter.outputImage;
CGImageRef myOutputImageRef = [self.drawContext createCGImage:newMyfilteredCIImage
fromRect:newMyfilteredCIImage.extent];
UIImage *newMyImage = [[UIImage alloc] initWithCGImage:myOutputImageRef];
self.monochromeSubView.image = newMyImage;
[self.appleMapView addSubview:self.monochromeSubView];
CGImageRelease(myOutputImageRef);
UIGraphicsEndImageContext();
Ở đây bạn đi - bản đồ có màu đen và w màu sắc. Để làm điều này tự động để di chuyển bản đồ đơn sắc cùng với cử chỉ của người dùng, bạn có thể phân lớp cử chỉ nhận dạng cử chỉ, thêm trực tiếp vào chế độ xem bản đồ. Sau đó, trên mọi cuộc gọi touchesMoved
, bạn có thể gọi chức năng vẽ lại này trong khi sử dụng lại ngữ cảnh mà bạn đã tạo.Tôi đã thử điều này với bản đồ táo chiếm 1/3 màn hình và kết quả là hiệu suất cực thấp (khoảng 3 FPS trên iPhone 5s) và có vài lỗi bạn phải sửa, chẳng hạn như: bay bản đồ trên cử chỉ vuốt trong khi hình ảnh đơn sắc tĩnh, tần suất vẽ bản đồ vẽ lại, vẽ lại hoặc tạo hiệu ứng động mỗi cửa sổ bật lên được hiển thị để phản hồi lại khi nhấn. Bạn có thể cố gắng hiển thị bản đồ trong CALayer, không phải trong Context, Apple đề xuất nó để cải thiện hiệu suất, nhưng xem xét tất cả những điều trên tôi cho rằng nếu bạn muốn xem các phần tử lọc động thì tốt hơn là sử dụng bản đồ có thể tùy chỉnh khác: GoogleMap hoặc MapBox.
Nguồn
2017-10-18 07:55:21
Có ai đã làm điều này không? Isnt làm bộ lọc như một fucntion? isnt fucntion này chỉ áp dụng cho các lớp phủ và không vào bản đồ bên dưới nó? – subharb
http://developer.apple.com/library/ios/#qa/qa1703/_index.html - liên kết không hoạt động _ (Rất tiếc, không thể tìm thấy trang đó.) _ – Nazir