小编Cut*_*are的帖子

OS X上的CATiledLayers

这让我很疯狂.我有一个大图像,需要有一个可缩放和可滚动的视图(理想情况下它也应该能够旋转,但我放弃了那部分).由于图像非常大,我打算使用CATiledLayer,但我根本无法让它工作.我的要求是:

  • 我需要能够缩放(在鼠标中心)和平移

  • 图像不应更改其宽度:高度比(不应调整大小,仅缩放).

  • 这应该在Mac OS 10.9上运行(不是 iOS!)

  • 内存使用不应该是巨大的(虽然高达100 MB应该没问题).

我有必要的图像在一个文件中完成,并且还平铺成许多(甚至有不同的缩放级别).我更喜欢使用瓷砖,因为内存应该更容易,但两种选择都可用.

大多数在线示例都是指iOS,因此使用UIScrollView进行缩放/平移,但我无法复制NSScrollView的行为.Mac OS XI发现的唯一例子就是这个,但是他的缩放始终是左下角,而不是中间,当我调整代码使用png文件而不是pdf时,内存使用量大约为400 MB ......

到目前为止,这是我最好的尝试:

@implementation MyView{
    CATiledLayer *tiledLayer;
}
-(void)awakeFromNib{
    NSLog(@"Es geht los");
    tiledLayer = [CATiledLayer layer];

    // set up this view & its layer
    self.wantsLayer = YES;
    self.layer = [CALayer layer];
    self.layer.masksToBounds = YES;
    self.layer.backgroundColor = CGColorGetConstantColor(kCGColorWhite);

    // set up the tiled layer
    tiledLayer.delegate = self;
    tiledLayer.levelsOfDetail = 4;
    tiledLayer.levelsOfDetailBias = 5;
    tiledLayer.anchorPoint = CGPointZero;
    tiledLayer.bounds = CGRectMake(0.0f, 0.0f, 41*256, 22*256);
    tiledLayer.autoresizingMask = kCALayerNotSizable; …
Run Code Online (Sandbox Code Playgroud)

macos objective-c calayer nsscrollview

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

NSScrollView中的NSImageView切片在缩小时绘制不需要的边框

我有一个NSScrollView,其documentView是一个巨大的NSView,由许多子NSImageViews组成,他们在地图中充当瓷砖.(整个地图是NSView,因为它比屏幕大小大,所以它嵌入在滚动视图中).

我能够使用正确的平铺位置显示地图,并使用条形/手势滚动.但是..当我启用放大倍率才能进行缩放时,会发生以下情况:在此输入图像描述 不知怎的,我假设自动布局添加下面的瓷砖边框,我不知道如何禁用它们.这些肯定是边界,因为我已经检查了数千次我的瓷砖和子视图大小相同..所以它来自哪里?我对iOS开发有很多经验,但是我完全迷失了NSScrollView(我的委托方法在哪里?).如何禁用滚动视图的此行为?

这是我的子视图代码:

- (void)setupSubViews
{
  NSLog(@"--------Creating subviews!-------");
    //first we create the subviews..
    //This is the key part, we traverse from top Left, and since OS X coordinates start at bottom left, we need to invert the rows!
    for (int i=0; i< NUMBER_OF_COLUMNS; i++) {
        for (int j=NUMBER_OF_ROWS-1; j>=0; j--) {
            CGRect frame = CGRectMake(i*256, j*256, 256, 256);
            NSImageView *newView = [[NSImageView alloc] initWithFrame:frame];
            newView.focusRingType = NSFocusRingTypeNone; //I gave this focusRing a try, it didn't work :(

            [self addSubview:newView]; …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c appkit nsscrollview

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

iOS8上的iPhone界面定位

我已经尝试这样做了两个星期,并且发现它不起作用的原因:

弃用的API

不推荐使用以下API:

UIViewController接口方向的方法和属性.如统一故事板中的通用应用程序所述,特征和大小类会替换它们.

来自iOS 8中的新功能

我需要的是:a FirstViewController,这是rootViewController我的navigationController.本FristViewController在人像模式(不是永远永远永远显示在景观)可用.

然后在导航堆栈中有一些中间ViewControllers(支持两种方向),直到我到达a LastViewController,这应该在LandscapeRight模式下可用(并且永远不会在纵向或其他模式下).

我一直在尝试使用以下内容CustomNavigationController,但显然iOS8中的内容发生了变化,我无法让它工作:

- (BOOL)shouldAutorotate { // Available in iOS 6.0 and later
    return YES; //  // May use topViewController's, but in this app it always returns YES
}

- (NSUInteger)supportedInterfaceOrientations { // Available in iOS 6.0 and later
    if (self.topViewController != nil)
        return [self.topViewController supportedInterfaceOrientations];
    else
        return [super supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { // Available …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c ios8

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

标签 统计

objective-c ×3

macos ×2

nsscrollview ×2

appkit ×1

calayer ×1

cocoa ×1

ios8 ×1

iphone ×1

xcode ×1