我已经实现了自己的自定义子类UIView并覆盖了该drawRect:方法.
在我的自定义视图中,我也想要手柄触摸,所以我也覆盖了touchesBegan,touchesMoved并且touchesEnded.
这工作正常,但如果屏幕上的视图数量增加,那么我必须使用a UIScrollView作为我的根视图UIViewController.
一旦我的自定义UIView成为子视图UIScrollView,它就不会收到触摸事件.即使我在我的自定义内移动手指UIView,滚动视图也会滚动(我的所有触摸事件都会转到UIScrollView).
我该如何解决这个问题?
我有一个Scrollview,它的属性在viewDidAppear中设置.现在,当我第一次到Scrollview时,没有任何问题.但是我有分配给UINavigationController的按钮.因此当我按下其中一个UINavigationController打开时,当我关闭导航控制器时,ScrollView无法正常恢复.它基本上将屏幕中心对齐为先前按下的按钮位置.因此,如果我尝试向上滚动它不会.
我试过在我的viewDidAppear中使用它:
scrollView.center = CGPointMake(scrollView.contentOffset.x, scrollView.contentOffset.y);
Run Code Online (Sandbox Code Playgroud)
哪个不太奏效.我怎么解决这个问题?我使用的是iOS6.1
大家好,我正在尝试放大uiimageview使用动画,因为我正在向下滚动uiscrollview.请注意它不是关于uiimageview放大和缩小uiscrollview.
我能够检测到我向下滚动的程度:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
}
Run Code Online (Sandbox Code Playgroud)
我需要根据(滚动因子)缩小图像我向下滚动多少.知道如何做到这一点?

我有一个子类UIView,让我们称之为TileView.m/h.
在TileView.m,我有以下代码:( [setup]肯定被调用,我检查断点).
- (void)setup {
self.userInteractionEnabled = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testPressed:)];
[self addGestureRecognizer:tap];
}
- (void)testPressed:(UITapGestureRecognizer *)sender {
NSLog(@"tap pressed");
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,testPressed当我点击视图时,不会调用该方法!
奇怪的是,如果我将TileView类复制到一个空白的xCode项目并在那里设置它,一切都很好.这是特殊的,因为手势首先由子视图处理,然后由超级视图处理 - 因此tile类不应受其超级视图的影响.此外,手势完全包含在TileView课程中.
作为参考,tile视图嵌套在:
Controller -> controller's view -> scroll view -> container view -> tile viewpattern中.
我试过没有成功:
tap.delegate = self然后gestureRecognizer:shouldRecognizeSimultaneously...始终实施return YES;没运气 :/
还有什么想法可能会出错?或者我可以运行哪些测试来更详细地了解问题?
编辑:更多细节
回想一下,tile视图嵌套在: Controller -> controller's …
我想知道我怎么可以使用触摸方法的UIImageView内部UIScrollView在Xcode.当我将UIImageView子视图添加到self.view时,我可以使用touch方法.但是当我将UIImageView子视图添加到UIScrollView时,我不能.我怎么解决这个问题?
这是我的代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
touches = [event allTouches];
for (UITouch *touch in touches) {
NSLog(@"Image Touched");
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 44, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height * 0.9)];
scrollView.scrollEnabled = TRUE;
scrollView.bounces = TRUE;
scrollView.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
scrollView.userInteractionEnabled = YES;
[self.view addSubview:scrollView];
UIImageView *ImageView = [UIImageView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width * 0.04, 10, [UIScreen mainScreen].bounds.size.width * 0.28, [UIScreen mainScreen].bounds.size.height * …Run Code Online (Sandbox Code Playgroud) 我是IOS开发的新手,但我遇到了UIScrollView的问题.首先,我在故事板中创建了Scroll View并添加了
@property (retain, nonatomic) IBOutlet UIScrollView *mainScroll;
Run Code Online (Sandbox Code Playgroud)
在视图控制器处理程序
在viewDidLoad方法中我有那个代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.mainScroll.contentSize = CGSizeMake(100.0,100.0); // Have to set a size here related to your content.
// You should set these.
self.mainScroll.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.mainScroll.minimumZoomScale = .5; // You will have to set some values for these
self.mainScroll.maximumZoomScale = 2.0;
self.mainScroll.zoomScale = 1;
UIButton* b = [[UIButton alloc] init];
[b setBounds:CGRectMake(.0f,0.f,100.0,100.0)];
[self.mainScroll addSubview:b];
}
Run Code Online (Sandbox Code Playgroud)
但模拟器中没有任何内容.但是,如果我在IB的故事板上添加按钮,则会出现按钮,我可以滚动视图.
对不起我的语言
我的视图控制器中只有一个UITableView,我的代码是:
@interface MyViewController ()<UITableViewDataSource,UITableViewDelegate>
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, [UIScreen mainScreen].bounds.size.height) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.scrollsToTop = YES;
[self.view addSubview:self.tableView];
Run Code Online (Sandbox Code Playgroud)
它甚至没有运行:
- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,我该如何解决这个问题?非常感谢你.
我让我的应用程序运行到一个点,我可以用图像和文本的内容填充我的水平uiscrollview.但是我不确定uiscrollview的概念是否真的符合我的要求,因为不同视图的contentSize在高度上是不一样的.这是一个例子:

假设我想在4个不同视图之间进行水平滚动(蓝色),每个视图包含图像子视图(相同大小)和文本子视图.然而,文本子视图将始终占用不同的空间量,因此高度.如何根据特定视图的实际高度确保仍具有垂直滚动(红色)的能力,如何定义整个contentSize的高度?如果在uiscrollview中无法做到这一点,你还会怎么做呢?
我在我的项目中使用了出色的StackBlur类,但是我正在尝试为Yahoo Weather App创建一个类似的效果,其中图像根据滚动值模糊.我已设法使用scrollViewDidScroll方法实现它,但效果缓慢且滞后.
你解决这个问题的最佳方法是什么?将图像存储到缓存是我唯一能想到的.
谢谢
UPDATE
我只是创建了两个带模糊的UIImageViews,然后将alpha设置为零,并通过滚动视图的内容偏移量增加它.
在我的应用程序中,我有一个层次结构,如主视图 - > UIScrollView - > UISearchBar.搜索栏覆盖整个屏幕宽度.但是当它切换到横向时,滚动视图会根据横向调整自身并覆盖整个屏幕,但其子视图如UISearchBar宽度保持与纵向相同.另外,我正在使用Autolayout,我已经在故事板中正确设置了约束(前导和尾随,宽度(大于等于320)等).
另外我知道在SO中有几个答案,但几乎每个人都会在willAutororate中再次说明设定宽度.但我在UIScrollview中有大约15个子视图,我认为不可能以编程方式设置(增加LOC)加上我认为Autolayout必须有一些解决方案.
uiscrollview ×10
ios ×7
iphone ×3
objective-c ×2
uiimageview ×2
addsubview ×1
autolayout ×1
blur ×1
cocoa-touch ×1
landscape ×1
stack ×1
touch ×1
uitableview ×1
uiview ×1