圖片濾鏡iOS類庫:FeSlideFilter
用很生動的方式實現圖片濾鏡的選擇過程。一般的圖像加工類app,圖像濾 鏡的選擇都是通過彈出一排濾鏡效果(通常是默認圖片的濾鏡效果)讓用戶點擊,然后再生成對應的圖像效果。這份代碼實現的濾鏡選擇過程是,直接在原圖產生濾 鏡效果,用戶通過滑動屏幕,濾鏡效果類似蒙版一樣蓋住原圖,十分方便用戶瀏覽不同的濾鏡效果。

Requirement
FeSpringFlowLayout use UIKit Dynamics to implement.
So You must ensure your project has iOS version more than iOS 7.0.
And compatible with ARC or non-ARC.
Sample code
In Sample code, I user LUT technique to apply filter to photo.
More info, visist my blog : http://nghiatran.me/index.php/filter-me-color-lookup-table-part-2/
If you wanna use LUT, please sure you added Core Image and OpenGL ES framwork to your project.
How to use
FeSlideFilter use Data Source / Delgate pattern like UITableView.
Just provide filtered UIImage
and Title for each Filter.
Ex :
// Number of filter -(NSInteger) numberOfFilter { return 5; } // Title for filter at index -(NSString *) FeSlideFilterView:(FeSlideFilterView *)sender titleFilterAtIndex:(NSInteger)index { return _arrTittleFilter[index]; } // Filtered UIImage at index -(UIImage *) FeSlideFilterView:(FeSlideFilterView *)sender imageFilterAtIndex:(NSInteger)index { return _arrPhoto[index]; }
If you want to customize by yourself. Just assign your button with _doneBtn property.
// Btn UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(0, 0, 40, 40); [btn setBackgroundImage:[UIImage imageNamed:@"done"] forState:UIControlStateNormal]; _slideFilterView.doneBtn = btn;
Data Source - Delegate
You can change behavior by changing 3 properties when init
Data Source :
@required // Number of filter -(NSInteger) numberOfFilter; // Title filter at index -(NSString *) FeSlideFilterView:(FeSlideFilterView *) sender titleFilterAtIndex:(NSInteger) index; // Image at index -(UIImage *) FeSlideFilterView:(FeSlideFilterView *) sender imageFilterAtIndex:(NSInteger) index; @optional // Font at index -(UIFont *) FeSlideFilterView:(FeSlideFilterView *) sender fontForTitleAtIndex:(NSInteger) index; // Layer's content Gravity -(NSString *) kCAContentGravityForLayer;
Delegate :
// Call when user tapped Btn -(void) FeSlideFilterView:(FeSlideFilterView *) sender didTapDoneButtonAtIndex:(NSInteger) index; // Determine when user can slide -(BOOL) FeSlideFilterView:(FeSlideFilterView *)sender shouldSlideFilterAtIndex:(NSInteger) index; // Call when user have just slided -(void) FeSlideFilterView:(FeSlideFilterView *)sender didBeginSlideFilterAtIndex:(NSInteger) index; // Call when user end Slide -(void) FeSlideFilterView:(FeSlideFilterView *)sender didEndSlideFilterAtIndex:(NSInteger) index;