国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS開發日記45-類似淘寶商品詳情查看翻頁效果的實現

2019-11-14 17:58:14
字體:
來源:轉載
供稿:網友

今天博主有一個類似淘寶商品詳情查看翻頁效果的實現的需求,遇到了一些困難點,在此和大家分享,希望能夠共同進步.

1.使用第三方框架

我用到的第三方庫EGORefreshTableHeaderView下拉刷新的效果還有就是PWLoadMoreTableFooterView上拉加載更多

主要的思路在于UISCrollView兩頁,一頁展示商品概況,另一頁展示商品更多詳情

首先,第一頁的view包含一個UITableView,這個tableView實現PWLoadMoreTableFooterView中的delegate方法,

實現delegate代理方法的時候使用

 

- (void)scrollViewByPageControlPage:(NSInteger)page  

{  

    [UIView beginAnimations:nil context:nil];  

    [UIView setAnimationDuration:0.50];  

    [self.backScrollView setContentOffset:CGPointMake(0, (ScreenHeight-navigationHeight-OffsetHeight)*page)];  

    [UIView commitAnimations];  

}  


將scrollView滾動到第二頁,以便展示更多詳情。

 

再次,在scrollview的第二頁中加入一個View ,在此view上再創建一個ScrollView,這個scrollView實現EGORefreshTableHeaderView的delegate方法

具體如下:

 

#PRagma mark EGORefreshTableHeaderDelegate Methods  

  

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{  

    [self reloadTableViewDataSource];  

    [self performSelector:@selector(doneLoadingTableViewDataForIndex) withObject:nil afterDelay:1.0];  

}  

- (void)doneLoadingTableViewDataForIndex  

{  

    _reloading = NO;  

    [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:lectureScrollView];  

    [_loadMoreFooterView pwLoadMoreTableDataSourceDidFinishedLoading];  

    [self scrollViewByPageControlPage:0];  

}  

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{  

        return _reloading; // should return if data source model is reloading  

}  

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{  

        return [NSDate date]; // should return date data source was last changed  

}  

一下實現EGORefreshTableHeaderView的delegate方法

此處設置跳轉到SCRollView第一頁

 

- (void)doneLoadingTableViewDataForIndex  

{  

    _reloading = NO;  

    [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:lectureScrollView];  

    [_loadMoreFooterView pwLoadMoreTableDataSourceDidFinishedLoading];  

    [self scrollViewByPageControlPage:0];  

}  


2.使用原生框架

 代碼貼出來,各位看官自行理解

- (void)viewDidLoad

{

    [super viewDidLoad];

    UipanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(doPan:)];

    [self.view addGestureRecognizer:pan];

    pan.enabled = NO;

     self.panGesture = pan;

    _panGesture.delaysTouchesBegan = YES;

    [self.view bringSubviewToFront:_tableView];

// Do any additional setup after loading the view, typically from a nib.

}

 

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { 

CGPoint offset = aScrollView.contentOffset;

CGRect bounds = aScrollView.bounds;

CGSize size = aScrollView.contentSize;

UIEdgeInsets inset = aScrollView.contentInset;

float y = offset.y + bounds.size.height - inset.bottom;

float h = size.height;

float reload_distance = 30;

if(y > h + reload_distance) {

NSLog(@"load more rows");

        _panGesture.enabled = YES;//一個拖動手勢

        self.tableView.scrollEnabled = NO;

        _isCurrentOnScreen = YES;

    }

}

 

- (void)doPan:(UIPanGestureRecognizer *)pan

{

    if(pan.state == UIGestureRecognizerStateBegan)

    {

        self.beginPoint = [pan locationInView:self.view];

//        self.beginPoint=[pan locationInView:self.view];

    }else if (pan.state == UIGestureRecognizerStateChanged)

    {

        if(_isCurrentOnScreen)

        {

            CGPoint touchPoint = [self.view convertPoint: [pan locationInView:self.tableView] fromView:_tableView] ;

            [self.tableView setFrame:CGRectMake(0, 20 + touchPoint.y - _beginPoint.y, 320, 460)];

        }else

        {

            [self.tableView setFrame:CGRectMake(0, - 480 + [pan locationInView:self.view].y - _beginPoint.y, 320, 460)];

        }

    }else if (pan.state == UIGestureRecognizerStateEnded)

    {

 

        if(_isCurrentOnScreen)

        {

            CGPoint touchPoint = [self.view convertPoint: [pan locationInView:self.tableView] fromView:_tableView] ;

            if(touchPoint.y - _beginPoint.y < -200)

            {

                [UIView animateWithDuration:0.01 animations:^{

                    [self.tableView setFrame:CGRectMake(0, - 480, 320, 460)];

                }];

                _isCurrentOnScreen = NO;

            }else

            {

                [UIView animateWithDuration:0.01 animations:^{

                    [self.tableView setFrame:CGRectMake(0, 20, 320, 460)];

                } completion:^(BOOL finished) {

                    [self stopPan];

                }];

            }

 

        }else

        {

            if([pan locationInView:self.view].y - _beginPoint.y < 200)

            {

                [UIView animateWithDuration:0.3 animations:^{

                    [self.tableView setFrame:CGRectMake(0, -480, 320, 460)];

                }];

                 _isCurrentOnScreen = NO;

            }else

            {

                [UIView animateWithDuration:0.3 animations:^{

                    [self.tableView setFrame:CGRectMake(0, 20, 320, 460)];

                } completion:^(BOOL finished) {

 

                    [self stopPan];

                }];

            }

        }

        [self.view bringSubviewToFront:_tableView];

    }

 

}

- (void)pan:(UIPanGestureRecognizer *)pan

{

    NSLog(@"11");

}

 

- (void)stopPan

{

     self.tableView.scrollEnabled = YES;

    _panGesture.enabled = NO;

     _tableView.panGestureRecognizer.enabled = YES;

}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宽甸| 阜康市| 青龙| 耒阳市| 正定县| 喀喇| 浦江县| 荔浦县| 绥芬河市| 乌恰县| 吴桥县| 九寨沟县| 门源| 凤山市| 黎川县| 佛冈县| 田阳县| 林芝县| 南岸区| 瑞安市| 绩溪县| 格尔木市| 探索| 宣武区| 张家界市| 清苑县| 新余市| 景洪市| 腾冲县| 尖扎县| 柳江县| 永新县| 尉犁县| 大田县| 鄱阳县| 会昌县| 大名县| 腾冲县| 正镶白旗| 乃东县| 荔波县|