Iphone 使用UIScrollView即时刷卡
我正在编写这个应用程序,它是一个flashcard应用程序,我想创建一个用户界面,当用户进行水平刷卡时,它会显示一个不同的卡片页面。 我想出了使用Iphone 使用UIScrollView即时刷卡,iphone,uiscrollview,Iphone,Uiscrollview,我正在编写这个应用程序,它是一个flashcard应用程序,我想创建一个用户界面,当用户进行水平刷卡时,它会显示一个不同的卡片页面。 我想出了使用UIScrollView的想法,但问题是我希望滚动视图在滑动发生时立即显示下一页,即使我要打开页面,也应该滑动到视图大小的至少一半,以便触发它,我尝试的两种不同方法如下: 首先,我禁用从UIScrollView(使用scrolEnabled)滚动,这样它会将滑动事件传递给响应器链,然后将右滑动手势识别器添加到相应的视图中。这种方法的问题是,手势识别器通
UIScrollView
的想法,但问题是我希望滚动视图在滑动发生时立即显示下一页,即使我要打开页面,也应该滑动到视图大小的至少一半,以便触发它,我尝试的两种不同方法如下:
首先,我禁用从UIScrollView
(使用scrolEnabled)滚动,这样它会将滑动事件传递给响应器链,然后将右滑动手势识别器添加到相应的视图中。这种方法的问题是,手势识别器通常无法报告刷卡事件
我尝试的第二件事是使用委托方法
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
static CGFloat lastScrollOffset;
static BOOL hasScrolled;
if (lastScrollOffset > theScrollView.contentOffset.x && !hasScrolled){
NSLog(@"left Swipe");
[theScrollView scrollRectToVisible:CGRectMake(0, 0, 320, 480) animated:YES];
if (theScrollView.contentOffset.x == 320)
hasScrolled = NO;
hasScrolled = YES;
}
if (lastScrollOffset < theScrollView.contentOffset.x && !hasScrolled){
NSLog(@"right Swipe");
[theScrollView scrollRectToVisible:CGRectMake(320, 0, 320, 480) animated:YES];
if (theScrollView.contentOffset.x == 0)
hasScrolled = NO;
hasScrolled = YES;
}
lastScrollOffset = theScrollView.contentOffset.x;
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
静态CGF偏移量;
静态布尔哈斯克罗尔;
如果(lastScrollOffset>theScrollView.contentOffset.x&&!已滚动){
NSLog(“左扫”);
[ScrollView scrollRectToVisible:CGRectMake(0,0320480)动画:是];
如果(theScrollView.contentOffset.x==320)
哈斯克罗尔=否;
哈斯克罗尔=是;
}
if(lastScrollOffset
不能正常工作
我注意到当有另一个触摸发生时,ScrollRecttoVisible
被取消。我的假设有多准确
是否有更好的方法解决此问题?如果禁用滚动,则可能不希望使用UIScrollView:)
当检测到刷卡时,我会在普通UIView(使用)内的下一张卡上设置动画。我认为没有所谓的
uisweepView
,但这只是一个旁注
如果您有固定数量的卡,则可以轻松使用启用分页功能的UIScrollView
编辑:即使您的卡太多,这样的解决方案不可行,您仍然可以使用启用分页的UIScrollView
。然而,这将需要更多的工作
编辑2:我刚意识到在回答之前我没有正确阅读你的问题。我不明白你为什么不想使用分页。我认为寻呼给用户提供的反馈比即时交换卡片更好。hehe感谢您指出输入错误:p,我真的不知道即时刷卡会是什么感觉,所以,如果我想办法实现它,我可以更容易地比较它们。谢谢伙计:)我使用的是
CGAffineTransformMakeTransformMakeTransform
,它工作得很好,我会在有机会的时候投票支持你的答案。再次为问题干杯-我在发布后意识到,这种方法的另一个优点是不必一次性创建所有卡片,只需在需要时创建它们-应该有助于保持应用程序的速度和内存使用率低:)猜我必须将其发布到一个新问题中,但我正在从nib加载我的视图,下一张卡与第一张卡几乎相同,但有一个不同的问题,CGAffineTransformMakeTransform
的问题是它移动了视图,然后我必须创建一个类似于其他视图的视图,以便在原始视图移动时它将取代它的位置。应该有更好的方法来解决这个问题,对吗?不,这听起来是对的-只是可能会创建一个QuestionView类来扩展视图,这样你就可以很容易地为每个问题创建一个视图,但不管你怎么做,这都是正确的方法。我想到的是创建当前视图的快照,然后将视图移动到视图宽度,然后将照片设置为屏幕一侧的动画,并将原始视图从另一侧设置为中心的动画。但这里有一个新问题(根据您的想法向上移动),如果我将原始视图移动到屏幕的另一侧,那么我将如何轻松访问新视图上的视图对象?一种方法是通过循环测试将IVAR重新分配给新的视图对象