我正在做那种下拉到刷新的事情.在scrollViewDidEndDecelerating中,我检查偏移是否超过某个点,并在scrollViewDidEndDragging中设置contentInset,以便保持下拉部分可见.
但是,这会导致闪烁,可能是由于在滚动动画期间重置了contentInset.我想我可以通过在scrollViewWillEndDragging中设置targetContentOffset来阻止这种情况,但它似乎没有做到这一点.
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (scrollView.contentOffset.y < -kRefreshViewDelta)
{
self.tableView.contentInset = UIEdgeInsetsMake(kRefreshViewHeight, 0.0f, 0.0f, 0.0f);
}
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if (scrollView.contentOffset.y < -kRefreshViewDelta)
{
targetContentOffset->y = kRefreshViewHeight ;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在向我的应用添加一个虚拟ScrollView,以检测用户在状态栏上的点击,在我的程序中执行一个事件..我在ViewDidLoad中创建它:
//Dummy Scroll is for the tap on status bar to work
UIScrollView *dummyScrollView = [[UIScrollView alloc] init];
dummyScrollView.delegate = self;
[[self view ] addSubview:dummyScrollView];
[[self view] sendSubviewToBack:dummyScrollView];
Run Code Online (Sandbox Code Playgroud)
然后我实施:
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
NSLog(@"scrollViewShouldScrollToTop");
.
.
}
Run Code Online (Sandbox Code Playgroud)
在所有以前版本的IOS中,这种工作非常漂亮且完美无缺,但在iOS 6下,scrollViewShouldScrollToTop永远不会被调用.这是一个错误?API说它仍然可以作为iOS6中委托的一部分使用,但在设备和模拟器上的iOS6下它永远不会执行......任何人都知道发生了什么?
仍然没有其他TableView或ScrollView,但有一个MAPVIEW ?? 但是MapView没有我可以找到设置为NO的shouldScrollToTop ..所以我仍然无法理解为什么它在iOS 6下停止工作...
我有一个问题,我在UIScrollView中有一个UIImageView.在Interface Builder中,UIScrollView占用整个屏幕,UIImageView占用整个UIScrollView.问题是,当我有一个横向导向的图像时,我将它设置为纵横比较,所以我在顶部和底部有灰色条纹(这就是我想要的).然而,当我放大照片时,一旦照片变焦到足以适合屏幕垂直,我希望它不会平移到它上面的灰色区域.查看我附上的屏幕截图.我基本上希望它在这方面像照片应用程序一样工作.这是我设置UIScrollView和UIImageView的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.imageView.image = [UIImage imageNamed:@"IMG_0300.JPG"];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
self.scrollView.clipsToBounds = YES;
self.scrollView.contentSize = self.imageView.bounds.size;
self.scrollView.zoomScale = 1.0;
self.scrollView.maximumZoomScale = 5.0;
self.scrollView.minimumZoomScale = 1.0;
}
-(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.imageView;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.
雅各
在下面的代码中,我看到一个红色的正方形出现,可以滚动浏览(因为scrollview的内容是4x屏幕)。
但是,一旦我开始缩小(比例<1.0),滚动视图contentSize就会立即跳转到scaleiPad屏幕大小的几倍。例如:
0.985783 757.081249 1009.441665
Run Code Online (Sandbox Code Playgroud)
之后,我将无法再移动广场。当scaleget大于1.0 时,我只能移动正方形。在这种情况下,滚动指示器显示contentSize仍然是scale屏幕尺寸的乘积。
另一个效果是,当缩小到1.0以下时,红色方块通常会通过缩小移向左上角。但是,释放屏幕后(没有任何进一步的缩放),它甚至会移动到角落。编辑:这必须是滚动视图的橡皮筋。
(正方形本身确实按预期比例缩放。)
我在这里想念的是什么?这是我的视图控制器代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.scrollView = [[UIScrollView alloc]initWithFrame:self.view.bounds];
self.scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height * 2);
self.scrollView.backgroundColor = [UIColor colorWithWhite:0.5f alpha:1.0f];
self.scrollView.minimumZoomScale = 0.1f;
self.scrollView.maximumZoomScale = 4.0f;
self.scrollView.clipsToBounds = YES;
self.scrollView.delegate = self;
self.contentView = [[UIView alloc] initWithFrame:self.scrollView.bounds];
[self.scrollView addSubview:self.contentView];
[self.view addSubview:self.scrollView];
UIView* view = [[UIView alloc] initWithFrame:CGRectMake(400, 400, 100, 100)];
view.backgroundColor = [UIColor redColor];
[self.contentView addSubview:view];
}
#pragma …Run Code Online (Sandbox Code Playgroud) 我有两个UIScrollView并排,我正在研究的一个功能是能够捏合和缩放1个UIScrollView,并让另一个旁边的它以与我正在点击的方式相同的方式响应.特别感兴趣的是放大其他UIScrollView放大的同一区域.设置zoomScale是一回事,但是完全模仿缩放行为是另一回事.
我怎样才能做到这一点?
我正在遇到一个问题,让UIScrollView正确更新,以响应最小缩放比例的变化.
scrollview有一个UIImageView作为子视图,UIImageView的image属性是为响应UIPickerView的didFinishPickingMediaWithInfo方法而设置的:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage];
[self.imageView setImage:takenImage];
[self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)];
[self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)];
[self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width / takenImage.size.width];
[self.scrollView setMaximumZoomScale:2.0];
[self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES];
[self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
这在第一次使用此方法添加图像时正常工作.但是,如果再次触发此方法 - 即使添加与第一次相同的图像 - 后续图像在scrollView中以完整大小显示,并且无法缩小 - 仅放大.
我甩了contentSize,zoomScale,minimumZoomScale和maximumZoomScale滚动视图中的日志,他们每次都相同.所述minimumZoomScale被正确每次计算.
这就好像滚动视图被重绘minimumZoomScale为1.0,忽略了它已被明确设置的事实.我有什么明显的遗漏吗?
假设标准配置(向上/向下),我想检测用户何时UIColletionView向上或向下滚动(这是子类UIScrollView和符合的类型UIScrollViewDelegate).我没有看到代表直接发现任何信息来检测这一点,尽管我可能已经在寻找一些东西了.
如果我知道用户正在滚动的方向,那么我可以使用这些UICollectionViewDatasource方法来确定是否应该从REST服务器加载更多数据,或者清除我已经拥有的用于管理固定内存空间的信息.
//如果向下滚动,则显示部分
- (UICollectionReusableView *)collectionView:(UICollectionView *)cv viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
Run Code Online (Sandbox Code Playgroud)
//如果向下滚动,则节中的最后一个单元格正在消失
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{
Run Code Online (Sandbox Code Playgroud)
//如果向上滚动,则显示部分中的最后一个单元格
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
Run Code Online (Sandbox Code Playgroud)
//如果向上滚动,部分就会消失
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath{
Run Code Online (Sandbox Code Playgroud) 我有一个根本不滚动的UIScrollView.如果我启用弹跳,我可以向侧面滚动足够远以查看视图外部有内容,但是当我释放时它会快速回到原点.我打开了分页,但如果我将其关闭,我会得到相同的行为.我关闭了自动布局.在IB中,scrollView位于MainViewController中,正确链接到IBOutlet,如下所示.
@interface MainViewController ()
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
for (int i = 0; i < 3; i++) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
// I might be doing this wrong, but it returns a PosterView object just like I want it to.
NSArray *view = [[NSBundle mainBundle] loadNibNamed:@"posterView" owner:self options:nil];
[[view objectAtIndex:0] setFrame:frame];
[self.scrollView addSubview:[view objectAtIndex:0]];
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 3, …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个由某些类实现的协议,所有这些都应该实现UIScrollViewDelegate.我想到的是我的新协议实现协议UIScrollViewDelegate.
protocol MyProtocol: UIScrollViewDelegate {
var myVar: NSString { get }
func myMethod()
}
Run Code Online (Sandbox Code Playgroud)
由于协议应具有其默认实现,因此我还为此协议创建了扩展.
extension MyProtocol {
func myMethod() {
print("I'm printing")
}
func scrollViewDidScroll(scrollView: UIScrollView) {
print("I'm scrollin")
}
}
Run Code Online (Sandbox Code Playgroud)
它编译,但不起作用.我做错了什么以及创建扩展协议的默认实现的正确方法是什么?
uiscrollviewdelegate ios swift swift-extensions swift-protocols
我有一个我的应用程序的入门部分,有4页用户水平滚动,以了解如何使用该应用程序(标准).我希望在用户从一个页面滚动到另一个页面时转换背景颜色.
我有我想要使用的4个RGB值:
241170170
170201241
188170241
241199170
我知道我必须使用滚动视图委托+内容偏移来更改uicolor值,但我不知道如何让它去我选择的特定颜色.
任何帮助将不胜感激.任何实施都可以,迅捷或客观
谢谢
ios ×8
uiscrollview ×7
objective-c ×3
iphone ×2
swift ×2
ios6 ×1
ios6.0 ×1
ios7 ×1
ipad ×1
uiimageview ×1
uikit ×1
uitableview ×1
zoom ×1