我有UIScrollView子类.它的内容是可重用的 - 大约有4或5个视图用于显示数百个元素(同时滚动隐藏的对象重用,并在需要查看它们时跳转到另一个位置)
我需要的是:能够自动滚动我的滚动视图到任何位置.例如,我的滚动视图显示第4,第5和第6个元素,当我点击某个按钮时,它需要滚动到第30个元素.换句话说,我需要UIScrollView的标准行为.
这很好用:
[self setContentOffset:CGPointMake(index*elementWidth, 0) animated:YES];
Run Code Online (Sandbox Code Playgroud)
但我需要一些定制.例如,更改动画持续时间,添加一些代码以在动画结束时执行.
明显的决定:
[UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
[self setContentOffset:CGPointMake(index*elementWidth, 0)];
} completion:^(BOOL finished) {
//some code
}];
Run Code Online (Sandbox Code Playgroud)
但我有一些动作连接到滚动事件,所以现在它们都在动画块中,它导致所有子视图的帧也动画(感谢几个可重复使用的元素,所有这些都不是我想要的动画)
问题是:我如何制作自定义动画(实际上我需要自定义持续时间,最后操作和BeginFromCurrentState选项)以进行内容偏移而不动画连接到scrollViewDidScroll事件的所有代码?
UPD:
感谢Andrew的回答(第一部分)我解决了内部动画的问题scrollViewDidScroll:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
[UIView performWithoutAnimation:^{
[self refreshTiles];
}];
}
Run Code Online (Sandbox Code Playgroud)
但scrollViewDidScroll必须(为了我的目的)执行每一帧动画,就像它的情况一样
[self setContentOffset:CGPointMake(index*elementWidth, 0) animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是,现在它只在动画开始时执行一次.
我怎么解决这个问题?
我有UIScrollView和其中包含UIImageViews的对象数量(UIView组合).一些UIImageViews有圆形边框(我用myImageView.layer.masksToBounds = YES;它).其他有矩形边框和图像的一部分(我Clip subviews在Interface Builder中使用属性).
问题是我发现剪辑属性在滚动时会对性能产生很大影响:
对于iPod touch(第4代)分析结果:
我真的需要将一些图像剪辑为圆形边界,将其他图像剪切为矩形边界(以显示图像的一部分).所以,这是我的问题:有什么方法可以提高性能?可能有低级别的方法(drawRect:或其他),或者可能是有用的围绕阿尔法掩蔽或我只是做错了什么?
我有自定义UIScrollView子类,里面有一些内容视图.在其中一些我有UITapGestureRecogniser.滚动视图不滚动时,一切正常.但是当它滚动内容视图时,不会收到点按动作.当滚动视图滚动时,通过子视图处理点击操作的最简单的解决方案是什么?
细节:
MyScrollView水平滚动.它包含许多内容视图(例如MyContentView).每个MyContentView宽度约为MyScrollView宽度的三分之一.因此,目前大约有3-4个可见MyContentView元素.主要的行为MyScrollView是1)确保在滚动之后,其中一个MyContentView元素将位于屏幕的中心,2)滚动到中心,MyContentView如果用户点击它.因此,主要答案,我希望得到的是如何"正确"贯彻在自来水行动处理MyContentView而MyScrollView减速.
我发现了一些相同的问题和答案,但没有一个让我满意.最好的是实现gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:UITapGestureRecogniser委托.但在这种情况下,我有时候(当我点击时,制作smaaaal拖动和释放手指,因此水龙头是钢可识别的(让我们称之为准水龙头))同时具有点击和滚动事件,即使滚动视图不滚动也会导致错误当我开始点击.当用户进行准点击时,我的应用程序尝试滚动到tapped MyContentView元素,然后立即处理正常滚动.由于在处理tap之后开始执行一些其他功能(它在正常滚动时不能执行),这似乎更加可怕.
我需要解决方案,其中滚动视图等待足以决定它不是点击事件,然后才滚动.否则,如果已识别出tap事件,则不得发生滚动.
cocoa-touch objective-c uiscrollview uigesturerecognizer ios
我正在使用键值观察.我有object_1(NSManagedObject)和其他一些对象观察者.当我从托管对象上下文中删除object_1时,我的程序崩溃了.
CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误.
我可以将一些东西放到dealloc方法(或其他地方)来删除object_1的所有观察者吗?或者唯一合适的决定是在我即将从托管对象上下文中删除object_1并通过其他对象监听此通知(从object_1的观察者中删除自己)时发送通知?
我有saveWindowController(NSWindowController子类对象).我使用initWithWindowNibName:方法来初始化控制器.
我在xib中设置了File的所有者SaveWindowController.我在xib文件中连接delegate(从窗口)到File的所有者和window(从控制器)到NSWindow.
[NSApp beginSheet:[self.saveWindowController window]
modalForWindow:[self window]
modalDelegate:nil didEndSelector:nil contextInfo:nil];
Run Code Online (Sandbox Code Playgroud)
执行此方法后,我看到没有标题栏的模态窗口,它看起来不像普通表.它只出现在第一个窗口的左下角.
你能帮帮我吗,我做错了什么?
我有UIScrollView图像分页.我想在一些手势上实现图像的动画缩放到全屏.另一个动画将图像缩放回滚动视图.就像在iPad上的照片应用程序或Safari中的视频一样.
当然它不会是UIImageView.它将是一些包含图像的包装类.主要问题是如何呈现全屏视图.是否必须是模态视图.
任何帮助表示赞赏.
我有模态窗口.在它的控制器中我这样做:
[[NSFontManager sharedFontManager] orderFrontFontPanel:self];
Run Code Online (Sandbox Code Playgroud)
它工作正常.字体管理器changeFont:在我的控制器中调用方法
但是,如果我写这个代码:
[[NSFontManager sharedFontManager] setTarget:self];
[[NSFontManager sharedFontManager] setAction:@selector(qwe:)];
[[NSFontManager sharedFontManager] orderFrontFontPanel:self];
Run Code Online (Sandbox Code Playgroud)
它不起作用.当我在字体面板中选择字体时,它不会调用qwe:method.
原因是窗口是模态的(当我显示没有模态会话的窗口时,一切正常).问题是为什么目标 - 动作变体不适用于模态窗口?
感谢帮助.
objective-c ×5
ios ×4
cocoa ×3
cocoa-touch ×3
uiscrollview ×2
uiview ×2
animation ×1
cocoa-sheet ×1
iphone ×1
macos ×1
nswindow ×1
performance ×1
xcode ×1
zooming ×1