Как сделать бесконечно длинный просмотр прокрутки на iPhone? - PullRequest
4 голосов
/ 19 марта 2011

Вот идея:

Представление прокрутки имеет несколько вложенных представлений, в этом примере A, B, C:

[A][B][C]

Как только пользователь прокручивает до C, представлениепрокручивать больше нельзя, но я хочу вернуться к A, например:

[C][A][B]

Когда пользователь продолжает прокручивать вправо, представление продолжает заполнять предыдущие представления в конце.Когда пользователь прокручивает влево представление, оно также должно вести себя аналогично, чтобы заставить пользователя думать, что это представление бесконечно длинное:

[A][B][C][A][B][C][A][B][C][A][B][C][A][B][C][A][B][C].....

Как я могу реализовать это в реальном коде?Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 марта 2011

вам нужно установить метод делегата, который будет вызываться при прокрутке вида, а затем проверить любой вид, который находится на расстоянии более одного экрана в пикселях от видимого, если он затем переместить вид экрана 3 * на ширину экрана вдругая сторона.

0 голосов
/ 11 ноября 2016

Это то, что вы хотите (на iphone 7 плюс).Это интерфейс с чистым кодом, без раскадровки. Сначала вам нужно добавить дополнительный код в свой AppDelegate.m.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
ViewController *vc = [ViewController alloc];
self.window.rootViewController = vc;
self.window.backgroundColor = [UIColor redColor];

return YES;

}

Второй добавить дополнительный код в ViewController.m

    @interface ViewController ()<UIScrollViewDelegate>
@property (nonatomic, strong) UIScrollView *readCannelScrollView;
@property (nonatomic, strong) UIImageView *pageOneView;
@property (nonatomic, strong) UIImageView *pageTwoView;
@property (nonatomic, strong) UIImageView *pageThreeView;
@end

@implementation ViewController
- (void)dealloc
{
    _readCannelScrollView = nil;
    _pageOneView = nil;
    _pageTwoView = nil;
    _pageThreeView = nil;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    //容器的属性设置
    self.readCannelScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:self.readCannelScrollView];
    CGSize size = self.readCannelScrollView.contentSize;
    size.width = 414*3;
    self.readCannelScrollView.contentSize = size;
    self.readCannelScrollView.pagingEnabled = YES;
    self.readCannelScrollView.showsHorizontalScrollIndicator = NO;
    self.readCannelScrollView.delegate = self;
    self.readCannelScrollView.contentOffset = CGPointMake(0, 0);
    //end
    //添加页面1
    self.pageOneView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 414, self.view.bounds.size.height)];
    self.pageOneView.backgroundColor = [UIColor lightGrayColor];
    self.pageOneView.image = [UIImage imageNamed:@"1"];
//    self.pageOneView.font = [UIFont systemFontOfSize:80];
//    self.pageOneView.textAlignment = NSTextAlignmentCenter;
    [self.readCannelScrollView addSubview:self.pageOneView];
    //添加页面2
    self.pageTwoView = [[UIImageView alloc] initWithFrame:CGRectMake(828, 0, 414, self.view.bounds.size.height)];
    self.pageTwoView.backgroundColor = [UIColor greenColor];
    self.pageTwoView.image = [UIImage imageNamed:@"2"];
//    self.pageTwoView.font = [UIFont systemFontOfSize:80];
//    self.pageTwoView.textAlignment = NSTextAlignmentCenter;
    [self.readCannelScrollView addSubview:self.pageTwoView];
    //添加页面3
    self.pageThreeView = [[UIImageView alloc] initWithFrame:CGRectMake(828, 0, 414, self.view.bounds.size.height)];
    self.pageThreeView.backgroundColor = [UIColor grayColor];
    self.pageThreeView.image = [UIImage imageNamed:@"3"];
//    self.pageThreeView.font = [UIFont systemFontOfSize:80];
//    self.pageThreeView.textAlignment = NSTextAlignmentCenter;
    [self.readCannelScrollView addSubview:self.pageThreeView];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
#pragma mark -
#pragma mark - scroll delegate
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"scrollView.contentOffset.x=%f",scrollView.contentOffset.x);
    CGFloat pageWidth = scrollView.frame.size.width;
    int currentPage = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
    if (currentPage == 0)
    {
        UIImageView *tmpTxtView = self.pageThreeView;
        self.pageThreeView = self.pageTwoView;
        self.pageTwoView = self.pageOneView;
        self.pageOneView = tmpTxtView;
    }
    if (currentPage == 2)
    {
        //换指针
        UIImageView *tmpTxtView = self.pageOneView;
        self.pageOneView = self.pageTwoView;
        self.pageTwoView = self.pageThreeView;
        self.pageThreeView = tmpTxtView;
    }
    //恢复原位
    self.pageOneView.frame = (CGRect){0,0,self.pageOneView.frame.size};
    self.pageTwoView.frame = (CGRect){414,0,self.pageTwoView.frame.size};
    self.pageThreeView.frame = (CGRect){828,0,self.pageThreeView.frame.size};
    self.readCannelScrollView.contentOffset = CGPointMake(414, 0);
}
@end

Если вы удовлетворены моим ответом, дайте мне звезду. Мне нужна репутация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...