Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用UIScrollView即时刷卡_Iphone_Uiscrollview - Fatal编程技术网

Iphone 使用UIScrollView即时刷卡

Iphone 使用UIScrollView即时刷卡,iphone,uiscrollview,Iphone,Uiscrollview,我正在编写这个应用程序,它是一个flashcard应用程序,我想创建一个用户界面,当用户进行水平刷卡时,它会显示一个不同的卡片页面。 我想出了使用UIScrollView的想法,但问题是我希望滚动视图在滑动发生时立即显示下一页,即使我要打开页面,也应该滑动到视图大小的至少一半,以便触发它,我尝试的两种不同方法如下: 首先,我禁用从UIScrollView(使用scrolEnabled)滚动,这样它会将滑动事件传递给响应器链,然后将右滑动手势识别器添加到相应的视图中。这种方法的问题是,手势识别器通

我正在编写这个应用程序,它是一个flashcard应用程序,我想创建一个用户界面,当用户进行水平刷卡时,它会显示一个不同的卡片页面。 我想出了使用
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重新分配给新的视图对象