Analysis of iOS development & amp; quot; secret & amp; quot; Page Effect of App content (2)

Source: Internet
Author: User

Analysis of iOS development & quot; secret & quot; Page Effect of App content (2)

@ I wrote a "secret" Cell effect article a few days ago, but there is still a gap with the desired effect at work, and the scalability is poor, so I rewrite the encapsulation, put the overall view into the scrollView, which is basically the same effect as the secret app.

@ The Code is as follows: (the fuzzy effect class will not be written. You can search for "UIImage + ImageEffects" and import Accelerate. framework)

1. MTSecretAppEffect. h

# Import
 
  
@ Interface MTSecretAppEffect: NSObject/*** creates an overall scrollView, loads headScrollView and tableView on it, and slides up and down by it, all other slides are not allowed ** @ return mainScrollView */-(UIScrollView *) createMainScrollView;/*** create headScrollView ** @ return headScrollView */-(UIScrollView *) createHeadScrollView; /*** create a Fuzzy view of the header ** @ param scrollview headScrollView ** @ return blurImageView */-(UIImageView *) createBlurImageViewOfView :( UIScrollView *) scrollview; /*** in-(void) scrollViewDidScroll :( UIScrollView *) method called in scrollView ** @ param scrollView * @ param mainScrollView * @ param tableView * @ param headScrollView * @ param blurImageView */-(void) scrollDidScrollView :( UIScrollView *) scrollView withMainScrollView :( UIScrollView *) mainScrollView withTableView :( UITableView *) tableView withHeadScrollView :( UIScrollView *) headScrollView withBlurImageView :( UIImageView *) blurImageView @ end
 

2. MTSecretAppEffect. m

# Import "MTSecretAppEffect. h" # import "UIImage + ImageEffects. h" # import
 
  
# Define HEADER_HEIGHT 200366f # define export CGRectMake (0, 0,320, HEADER_HEIGHT) const CGFloat kBarHeight = 50366f; const CGFloat Limit = 0.5f; const CGFloat Limit = limit; @ implementation limit/missing: the caller sets the proxy-(UIScrollView *) createMainScrollView {// and Self. view is the same as the bottom ScrollView UIScrollView * mainScrollView = [[UIScrollView alloc] initWithFrame: [UIApplication sharedApplication]. keyWindow. frame]; mainScrollView. bounces = YES; mainScrollView. alwaysBounceVertical = YES; mainScrollView. contentSize = CGSizeZero; mainScrollView. showsVerticalScrollIndicator = YES; mainScrollView. returns mainScrollView;}-(UIScrollView *) createHeadScrollView {response * headScrollView = [[UIScrollView alloc] initWithFrame: callback]; headScrollView. scrollEnabled = NO; headScrollView. contentSize = CGSizeMake (320,100 0); return headScrollView;}-(UIImageView *) createBlurImageViewOfView :( UIScrollView *) scrollview {uigraphicsbeginimagecontextwitexceptions (scrollview. bounds. size, scrollview. opaque, 0.0); [scrollview. layer renderInContext: UIGraphicsGetCurrentContext ()]; UIImage * img = partial (); UIImageView * blurImageView = [[UIImageView alloc] initWithFrame: CGRectMake (0, 0,320, HEADER_HEIGHT)]; blurImageView. image = [img applyBlurWithRadius: 12 tintColor: [UIColor colorWithWhite: 0.8 alpha: 0.4] saturationDeltaFactor: 1.8 maskImage: nil]; blurImageView. autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; blurImageView. alpha = 0; blurImageView. backgroundColor = [UIColor clearColor]; return blurImageView;}-(void) preview :( UIScrollView *) scrollView preview :( optional *) mainScrollView withTableView :( UITableView *) tableView preview :( UIScrollView *) headScrollView withBlurImageView :( UIImageView *) blurImageView {CGFloat y = 0.0f; CGRect rect = HEADER_INIT_FRAME; if (scrollView. contentOffset. y <0.0f) {// pull down to increase the effect y = fabs (MIN (0.0f, mainScrollView. contentOffset. y); headScrollView. frame = CGRectMake (CGRectGetMinX (rect)-y/2.0f, CGRectGetMinY (rect)-y, CGRectGetWidth (rect) + y, CGRectGetHeight (rect) + y );} else {y = mainScrollView. contentOffset. y; blurImageView. alpha = MIN (1, y * kBlurFadeInFactor); CGFloat backgroundScrollViewLimit = headScrollView. frame. size. height-kBarHeight; if (y> backgroundScrollViewLimit) {headScrollView. frame = (CGRect ){. origin = {0, y-headScrollView. frame. size. height + kBarHeight },. size ={ 320, HEADER_HEIGHT }}; tableView. frame = (CGRect ){. origin = {0, CGRectGetMinY (headScrollView. frame) + CGRectGetHeight (headScrollView. frame )},. size = tableView. frame. size}; tableView. contentOffset = CGPointMake (0, y-Batch); CGFloat contentOffsetY =-rows * Rows; [headScrollView setContentOffset :( CGPoint) {0, rows} animated: NO];} else {headScrollView. frame = rect; tableView. frame = (CGRect ){. origin = {0, CGRectGetMinY (rect) + CGRectGetHeight (rect )},. size = tableView. frame. size}; [tableView setContentOffset :( CGPoint) {0, 0} animated: NO]; [headScrollView setContentOffset: CGPointMake (0,-y * kBackgroundParallexFactor) animated: NO ];}
 

3. main. m

# Import "RootViewController. h" # import "CommentCell. h" # import "MTSecretAppEffect. h" # define HEADER_HEIGHT 200366f @ interface RootViewController ()
 
  
@ Property (nonatomic, strong) MTSecretAppEffect * secretEffect; // secretApp effect object @ property (nonatomic, strong) UIScrollView * mainScrollView; // scrollView with the same size as view @ property (nonatomic, strong) UIScrollView * headScrollView; // @ property (nonatomic, strong) UIImageView * blurImageView; // @ property (nonatomic, strong) UITableView * tableView; // @ end @ implementation RootViewController-(void) viewDidLoad {[super ViewDidLoad]; // 0. create the SecretApp effect object self. secretEffect = [[MTSecretAppEffect alloc] init]; // 1. scrollView self. mainScrollView = [self. secretEffect createMainScrollView]; self. mainScrollView. delegate = self; self. view = self. mainScrollView; // 2. head background View self. headScrollView = [self. secretEffect createHeadScrollView]; // 3. background Image view UIImageView * imageView = [[UIImageView alloc] initWithFra Me: CGRectMake (0, 0,320, HEADER_HEIGHT)]; imageView. image = [UIImage imageNamed: @ "secret.png"]; imageView. autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self. headScrollView addSubview: imageView]; // 4. fuzzy View _ blurImageView = [self. secretEffect createBlurImageViewOfView: self. headScrollView]; [self. headScrollView addSubview: _ blurImageView]; // 5. tableView self. TableView = [[UITableView alloc] initWithFrame: CGRectMake (0, HEADER_HEIGHT, CGRectGetWidth (self. view. frame), CGRectGetHeight (self. view. frame)-50) style: UITableViewStylePlain]; self. tableView. scrollEnabled = NO; self. tableView. delegate = self; self. tableView. dataSource = self; self. tableView. tableFooterView = [[UIView alloc] initWithFrame: CGRectZero]; self. tableView. separatorColor = [UIColor cle ArColor]; // 6. add view [self. view addSubview: self. headScrollView]; [self. view addSubview: self. tableView]; // 7. set self. mainScrollView. contentSize = CGSizeMake (320, self. tableView. contentSize. height + CGRectGetHeight (self. headScrollView. frame);}-(void) scrollViewDidScroll :( UIScrollView *) scrollView {// 8. call method [self. secretEffect scrollDidScrollView: scrollView withMainScrollView: self. mainScrollView WithTableView: self. tableView withHeadScrollView: self. headScrollView withBlurImageView: self. blurImageView] ;}# pragma mark-hide the status bar-(BOOL) prefersStatusBarHidden {return YES ;}# pragma mark-UITableView dataSource-(NSInteger) numberOfSectionsInTableView :( UITableView *) tableView {return 1;}-(NSInteger) tableView :( UITableView *) tableView numberOfRowsInSection :( NSInteger) section {return 20;}-(CGFloat) TableView :( UITableView *) tableView heightForRowAtIndexPath :( NSIndexPath *) indexPath {return 40;}-(UITableViewCell *) tableView :( UITableView *) tableView cellForRowAtIndexPath :( NSIndexPath *) indexPath {CommentCell * cell = [tableView dequeueReusableCellWithIdentifier: [NSString stringWithFormat: @ "Cell % ld", indexPath. row]; if (! Cell) {cell = [[CommentCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: [NSString stringWithFormat: @ "Cell % ld", indexPath. row];} cell. textLabel. text = [NSString stringWithFormat: @ "section = % ld row = % ld", indexPath. section, indexPath. row]; return cell;}-(void) didReceiveMemoryWarning {[super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated .} @ end
 
@:



Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.