我们使用 UICollectionView 构建日历视图。我们希望垂直滚动以更改我们查看的一天中的时间,或水平滚动以更改星期。
现在拖动日历会影响这两者。我们希望将其锁定得更多,以便具有更大速度的滚动方向是我们滚动的唯一方式。
所以我们不想禁用一个方向。我们只想一次只允许一个。
是否有滚动视图属性或支持此功能的东西?
我有一个 UIScrollview 在 y 轴上扩展并调用此委托方法:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
float yOff = scrollView.contentOffset.y;
NSLog(@"y off is %f", yOff);
}
Run Code Online (Sandbox Code Playgroud)
当scrollView移动到顶部(即yOff == 0)时,它实际上在大多数手机上停留在-20px,在iPhoneX上停留在-44px。如何关闭这种行为?这样做有哪些风险?
我有一个水平集合视图。总会有 2 个并排的单元格,它们都有相同的宽度和高度。这些单元格播放视频,滚动时我想加载屏幕上 70% 的下一个单元格的视频,并停止小于该单元格的视频。我发现了几个类似的问题,但所有内容似乎都引用了 1 个单元格。
1- 单元格 59 和 60 均 100% 在屏幕上
2-向左滚动,屏幕上59仍大于70%,60为100%,61小于30%
3- 仍在向左滚动,59 小于屏幕上的 30%,60 为 100%,61 大于 70%
任何内容都已经可见,如前两张照片中的单元格 59 和所有三张照片中的单元格 60 中的内容,我有逻辑阻止单元格再次加载,即使cell.loadNewVideo()将为它们运行。
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 0
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = UIScreen.main.bounds.width / 2
return CGSize(width: width, height: 150)
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
collectionView.visibleCells.forEach { cell in
guard let cell = cell as? VideoCell else { …Run Code Online (Sandbox Code Playgroud) 我想在并行工作的屏幕上有一对scrollview - 称为scrollA和scrollB.当用户滚动/缩放scrollA时,scrollB模仿该行为,缩放和平移相同.反之亦然.
这可能吗?提前致谢.
干杯,道格
我正在开发一个iPhone应用程序,其中我有一个页面,我在分段控件的控制中同时使用scrollview mkmapview和webview.
我这样做很有意思.
我的问题是我想在这些帧之外显示边框或框架.
我怎么能这样做?
这让我很难过.我正在试图弄清楚如何保存UIScrollView的状态.例如,我在UIScrollView中有几个像这样加载的图像:
NSUInteger i;
for (i = 1; i <= kNumImages; i++)
{
NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", i];
UIImage *image = [UIImage imageNamed:imageName];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何在用户可以返回到他们停止滚动的图像的位置?有谁知道如何做到这一点?谢谢.
当UITableViewCell中有UIScrollView时,Cell不会接收触摸事件.有没有办法取消UIScrollView的点击事件(只需要处理滚动)?
我有两个UIScrollView实例,我想让它们同时缩放.
有没有经验呢?
我正在使用它NSNotificationCenter告诉我的对象何时缩放.最初我以为我可以以某种方式进入当前可见的矩形,并且只是打电话zoomToRect:,但我没有看到这样做的方法.我现在拥有的是设置zoomScale和contentOffset属性.它看起来像这样:
- (void)registerForZoomNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveZoomNotification:)
name:ZOOM_NOTIFICATION_IDENTIFIER
object:nil];
}
- (void)receiveZoomNotification:(NSNotification*)notification {
UIScrollView *currentScrollView = (UIScrollView*)[notification object];
// zoomLevel
[(UIScrollView*)self.view setZoomScale:currentScrollView.zoomScale animated:NO];
// contentOffset
[(UIScrollView*)self.view setContentOffset:currentScrollView.contentOffset animated:NO];
}
#pragma mark -
#pragma mark UIScrollViewDelegate
- (void)scrollViewDidZoom:(UIScrollView *)pageScrollView {
[[NSNotificationCenter defaultCenter] postNotificationName:ZOOM_NOTIFICATION_IDENTIFIER object:pageScrollView];
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,看起来非常不稳定.想法有人吗?我应该采取不同的方法吗?
编辑:我应该澄清两个滚动视图同时不可见.它们在完全相同的时间滚动并不重要,只有滚动视图与滚动完成后的另一个滚动视图处于相同的缩放级别(和可见的矩形).
我这样做:
scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
[self addSubview:scrollView];
NSInteger x = scrollView.bounds.origin.x + Padding, y = scrollView.bounds.origin.y + Padding;
backButton = [[AButtonControl alloc] initWithCaption:@"Back" style:AButtonViewStyleGreen];
backButton.frame = CGRectMake(x, y, backButton.frame.size.width, backButton.frame.size.height);
y += backButton.frame.size.height + Spacing;
[scrollView addSubview:backButton];
ownerNameTextField = [[AFormTextField alloc] initWithFrame:CGRectMake(x, y, 200, 60) label:@"Guest name"];
y += ownerNameTextField.frame.size.height + Spacing;
[scrollView addSubview:ownerNameTextField];
guestListSelectField = [[AFormSelectField alloc] initWithFrame:CGRectMake(x, y, 200, 60) label:@"Guest list"];
y += guestListSelectField.frame.size.height + Spacing;
[scrollView addSubview:guestListSelectField];
referenceUserSelectField = [[AFormSelectField alloc] initWithFrame:CGRectMake(x, y, 200, 60) …Run Code Online (Sandbox Code Playgroud) 我希望平移到我的某个点UIScrollView,同时这样做也可以放大到最大缩放级别.在这里省略缩放矩形计算,似乎zoomToRect需要调用两次来缩放和平移我想要的位置.
[self performSelector:@selector(zoom) withObject:nil afterDelay:1.0];
[self performSelector:@selector(zoom) withObject:nil afterDelay:2.0];
[self performSelector:@selector(zoom) withObject:nil afterDelay:3.0];
- (void) zoom
{
[self.imageScrollView zoomToRect:(CGRect){ 913.556, 0, 320, 465 }
animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
第一个zoom调用放大,但第二个调用实际平移到正确的位置.一旦处于正确的位置,第三个呼叫什么都不做 - 这是我已经预期的第二个呼叫.
这有什么问题?根据Apple文档,我希望它能够在第一次调用时工作.
github上提供了一个示例项目.
uiscrollview ×10
iphone ×6
ios ×5
objective-c ×3
scroll ×2
swift ×2
cocoa-touch ×1
mkmapview ×1
uitableview ×1
uiwebview ×1