标签: uiscrollview

在UIScrollView的子视图中绘制网格会分配大量内存

我正在尝试在UIScrollView中创建一个UIView,它只包含一个由UIBezierPath或CG函数淹没的简单网格(行和行).问题是,当我有更大的UIScrollView内容大小(以及更大的子视图)时,在绘制网格期间会分配大量内存(50MB或更多).

UIViewController,它在整个场景中只包含UIScrollView - 在viewDidLoad中添加子视图:

@interface TTTTestViewController()

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@end

@implementation TTTTestViewController

-(void)viewDidLoad
{
    [super viewDidLoad];

    // create the subview
    TTTTestView *testView = [[TTTTestView alloc] init];
    [self.scrollView addSubview:testView];

    //set its properties
    testView.cellSize = 50;
    testView.size = 40;

    // set the content size and frame of testView by the properties
    self.scrollView.contentSize = CGSizeMake(testView.cellSize * testView.size, testView.cellSize * testView.size);
    testView.frame = CGRectMake(0, 0,  self.scrollView.contentSize.width, self.scrollView.contentSize.height);

    // let it draw the grid
    [testView setNeedsDisplay];
}

@end
Run Code Online (Sandbox Code Playgroud)

仅使用UIBezierPath/CG函数绘制网格的内部视图 - 取决于属性大小(行/列计数)和cellSize(网格中一个单元格的宽度/高度):

#define …
Run Code Online (Sandbox Code Playgroud)

memory drawing uiscrollview ios uibezierpath

1
推荐指数
1
解决办法
2155
查看次数

在UIScrollView内滚动时,调整大小的UIWebView将恢复为原始大小

我有一个UIScrollView,顶部有一些细节,标签等,底部有一个HTML内容的UIWebView.(我知道我不应该在UIS​​crollView中放置UIWebView,但我需要所有内容都可以滚动,而不仅仅是webview).

我的步骤是:

1)我设置UIWebView scrollEnabled=NO,并计算UIWebView内容大小并更新其框架:(在webViewDidFinishLoad:(UIWebView *)webView)

CGRect WebViewFrame = webView.frame;
WebViewFrame.size.height = 1;
webView.frame = WebViewFrame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
WebViewFrame.size = fittingSize;
webView.frame = WebViewFrame;
Run Code Online (Sandbox Code Playgroud)

2)我计算所有UIScrollView的内容并更新它contentSize:

CGFloat contentHeight = 0;
contentHeight += mainInfoView.frame.size.height;
contentHeight += .......
contentHeight += webView.frame.size.height;
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, contentHeight)];
Run Code Online (Sandbox Code Playgroud)

起初这似乎工作得很好,UIWebView调整大小到正确的大小,UIScrollView的contentSize似乎按预期扩展.

问题是当我滚动或移动滚动视图时,UIWebView立即返回其原始大小,我认为UIScrollView contentSize也会发生变化.我不明白为什么.

任何帮助将非常感谢!

scroll uiwebview uiscrollview ios

1
推荐指数
1
解决办法
994
查看次数

UIScrollView如何更改框架,而不是边界?UIScrollView如何工作?

我理解帧和边界之间的区别我认为,边界是视图的局部坐标系,而帧是超视图.

但是,使用scrollviews,我有点困惑.

当我在UIScrollView中有一个UIImageView并且用它来缩放它时,似乎框架变大(宽度和高度)也会增加相应UIImage的宽度和高度.

但是,看起来UIImageView的界限根本没有变化.

为什么是这样?滚动视图如何适用于所有这些?我已经阅读了多个问题并检查了文档,但这个解释让我望而却步.

如何放大UIScrollView会影响其内容?它只是改变缩放视图的框架,但不知何故不是边界?

objective-c uiscrollview uiview uiimageview ios

1
推荐指数
1
解决办法
2011
查看次数

UIScrollView不会在iOS 7中滚动到底部

在下面的代码示例中self.contentView引用了相关UIScrollView问题.

// Scroll to bottom.
CGPoint bottomOffset = CGPointMake(0, self.contentView.contentSize.height - 
                                   self.contentView.bounds.size.height);
if (bottomOffset.y >= 0.0)
{
    [self.contentView setContentOffset:bottomOffset animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,在iOS 6中,这非常好用,但在iOS 7中,滚动视图(假设它contentSize的垂直大于它frame.size.height)只滚动到添加到滚动视图的最底部子视图的最底部.

例如,如果以下情况适用:

self.contentView.frame.size.height == 50.0
self.contentView.contentSize.height == 100.0

aSubView.frame.origin.y == 50.0
aSubView.frame.size.height == 20.0
Run Code Online (Sandbox Code Playgroud)

滚动代码只会滚动直到aSubView可见; self.contentView.contentOffset.y == 20.0而不是self.contentView.contentOffset.y == 50.0在整个滚动视图的底部.

这是(当然)直到以编程方式添加另一个子视图self.contentView(通过用户交互),然后一切都自行纠正.

为清楚起见,我在滚动代码之前和之后设置断点来测量更改self.contentView.contentOffset.

其他有趣的事实,如果我直接删除animated并设置contentOffset它在iOS 7上按预期工作,但我更喜欢保持动画.

注意:不使用界面构建器

iphone objective-c uiscrollview ios contentoffset

1
推荐指数
2
解决办法
8086
查看次数

在故事板中添加了UIScrollView和UIImageView - 图像被压扁而不会滚动

在Xcode 5.0.2我创建了一个通用的应用程序,并拖了UIScrollViewUIImageView到iPhone和iPad故事板(这里全屏):

Xcode截图

然后我试图board.png通过ViewController.m中的以下代码加载图像(版权所有Wikipedia Commons,Denelson83):

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *img = [UIImage imageNamed:@"board"];
    NSLog(@"%s: img=%@ (%f x %f)", __PRETTY_FUNCTION__,
          img, img.size.width, img.size.height);
    _imageView.image = img;
    _scrollView.contentSize = img.size;
}
Run Code Online (Sandbox Code Playgroud)

但是结果被压扁并且图像无法滚动:

-[ViewController viewDidLoad]: img=<UIImage: 0x10912d770> (1000.000000 x 961.500000)
Run Code Online (Sandbox Code Playgroud)

应用截图

有什么建议吗?我怀疑图像是在底部切断的,因为我运行的是3.5英寸的iPhone模拟器?如何解决这个问题呢?

更新:

我试图在滚动视图中添加四个0约束,这样它就占据整个屏幕,但是当我用Cmd-Arrow旋转模拟器时 - 滚动视图不会调整大小(这里是Xcode的全屏):

约束截图

旋转的app

更新2:

当我UIImageView在Xcode故事板中将"视图模式" 更改为"左上角"并将源代码更改为以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *img = [UIImage imageNamed:@"board"];
    _imageView.image = img;
    _imageView.frame = CGRectMake(0, 0, img.size.width, …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c scrollview uiscrollview ios

1
推荐指数
1
解决办法
3064
查看次数

iOS 7:UINavigationController下拉UIScrollview

我有一个全屏UIScrollView,我在其中放置我的UIImageView(子视图).但是当我将此控制器与我的UINavigationController连接时,其中的图像被拉下(与条形图相同的高度).

尝试以下方法:

self.edgesForExtendedLayout = UIRectEdgeNone;

还尝试重置帧位置或偏移.什么都没有帮助.

cocoa-touch objective-c uiscrollview uinavigationcontroller ios

1
推荐指数
1
解决办法
88
查看次数

当用户在UIButton上滑动时,UIScrollView停止工作

我发现当我尝试滚动滚动时,如果你拖动其中一个按钮,它会阻止滚动视图滚动.如果要拖动不包含任何内容的scrollview的空白部分,它将滚动.有谁知道解决这个问题?

我的.h文件只有一个滚动视图和一个顶部的图像:

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) IBOutlet UIImageView *bodyImage;
Run Code Online (Sandbox Code Playgroud)

我的.m文件有此功能可以滚动

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[_scrollView setScrollEnabled:YES];
[_scrollView setContentSize:CGSizeMake(640, 1136)];
}


- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
Run Code Online (Sandbox Code Playgroud)

然后我在图像顶部添加了一个按钮,并将其推送到另一个视图控制器.

我可以看到为什么它只是单击按钮并转到下一个视图,因为按钮位于顶部!我基本上只是希望用户能够在页面上滚动,当他/她实际点击时,它会转到下一个视图!

谢谢你帮助大家,我真的很感激.

uibutton uiscrollview ios

1
推荐指数
1
解决办法
238
查看次数

使用UIScrollView更改图像的alpha

我的目标是有效地使用UIScrollView作为UISlider.

我已经设法编写了一个UISlider来改变图像的alpha,但是我想编写一个scrollview来改变图像滚动时的alpha值.

我认为我在右侧使用滚动视图内容偏移来调整滚动视图委托中的alpha平衡,但我似乎无法让代码工作!

关于如何做到这一点的任何建议?

谢谢

alpha uiscrollview uiscrollviewdelegate ios

1
推荐指数
1
解决办法
2013
查看次数

如何防止触摸通过UIImageView?

这是设置:

  1. UIScrollView:(0,0,320,568)
  2. 在UIScrollView之上的UIImageView:(0,0,320,568)

问题是,当UIImageView可见并且用户触摸它时,触摸会通过UIImageView传递到UIScrollView并滚动.

如何防止触摸通过UIImageView?

objective-c uiscrollview uiimageview ios

1
推荐指数
1
解决办法
171
查看次数

ScrollView在子视图xcode 6 Swift的顶部添加空间

我正在尝试使用故事板构建一个场景.在那里我有一个scrollView,它有以下约束.

ScrollView约束

在滚动视图中,我有一个普通的视图,它有以下约束.

查看约束

现在在视图中我有几个标签和其他对象.对于第一个标签,我从视图的顶部空格为0.但是出现以下结果.

在此输入图像描述

您可以注意到标签"Type"上方的空格.

请帮我解决一下这个.谢谢.

uiscrollview ios swift xcode6

1
推荐指数
1
解决办法
1443
查看次数