任何人都可以帮助我,如何通过示例删除默认的 iCarousel 项目居中位置?
问问题
597 次
1 回答
0
我遇到了同样的问题,并通过以下 hack 来解决;)
问题: 我需要只显示 3 个始终左对齐的项目的视图。
解决方案: 我所做的是始终至少制作 3 个项目。如果我有 0、1 或 2 个项目,我总是创建 3 个,但那些不需要显示的项目我将创建为空 UIView。我总是有 2 个占位符,但在某些情况下,一个或两个都是空的。
例如,如果我们要显示 2 个项目,我实际上创建了三个,但第三个是空的 UIView。我正在创建两个占位符和一个项目。
- 第一项是索引 0 处的第一个占位符
- 第二项是项目
- 第三项是第二个占位符,但 UIView 为空
如果我们要显示 1 个项目,我再次创建三个,但第二个和第三个是空的 UIView。与前面的示例相同,我正在创建两个占位符和一个项目。
- 第一项是索引 0 处的第一个占位符
- 第二项是Item但 UIView 为空
- 第三项是第二个占位符,但 UIView 为空
由于这种逻辑,我在重用时总是清理视图([v removeFromSuperview]),以确保它是干净的,如果需要显示新视图,我正在添加它([view addSubview ...)。项目和占位符的相同逻辑
如果您需要显示 3 个以上的项目,您可以使用相同的逻辑,但将值 3 更改为其他值。如果我错了更新我;)
这是我的代码的一部分,对我有用;)
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
return [[self getRecordings] count] > 3? [[self getRecordings] count] - 2: 1;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
if (view == nil)
{
view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
}
else
{
// If reusing remove content from holder view for fake items
for (UIView *v in view.subviews)
{
[v removeFromSuperview];
}
}
if ([[self getRecordings] count] >= 2)
{
[view addSubview:[(RecordingItemViewController*)[_recordingItemViewControllers objectAtIndex:index + 1] view]];
}
return view;
}
- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel
{
return 2;
}
- (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
if (view == nil)
{
view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
}
else
{
// If reusing remove content from holder view for fake items
for (UIView *v in view.subviews)
{
[v removeFromSuperview];
}
}
if (([[self getRecordings] count] > 0 && [[self getRecordings] count] < 3 && index == 0) || [[self getRecordings]count] >= 3)
{
[view addSubview:[(RecordingItemViewController*)(index == 0? [_recordingItemViewControllers objectAtIndex:0]: [_recordingItemViewControllers lastObject]) view]];
}
return view;
}
于 2013-05-22T12:35:33.760 回答